Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 04.12.2018
Сообщений: 71

Написать алгоритм НОК, НОД

09.04.2019, 11:42. Показов 2653. Ответов 9

Студворк — интернет-сервис помощи студентам
Добрый день, пожалуйста, напишите различные методы реализации вычисления НОК, НОД на c# в текстовом варианте

Добавлено через 12 минут
Мой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
StreamReader H = new StreamReader("nod.txt"); 
 string[] p; 
 p = H.ReadLine().Split(); 
 H.Close(); 
 int[] nod1 = new int[p.Length]; 
 for (int i = 0; i < nod1.Length; i++) 
 { 
 nod1[i] = Convert.ToInt32(p[i]); 
 } 
 
 int nok = nod1[0]; 
 int nod = nok; 
 
 for (int i = 0; i < nod1.Length; i++) 
 { 
 nod = Nod(nod, nod1[i]); 
 nok = Nok(nok, nod1[i]); 
 } 
 
 Console.WriteLine("Значения НОД = {0}, НОК = {1}", nod, nok); 
 Console.ReadLine(); 
 } 
 
 
 static int Nod(int a, int b) 
 { 
 
 int min = a > b ? b : a; 
 
 for (int i = min; i >= 0; i--) 
 { 
 if ((b % i == 0) && (a % i == 0)) 
 return i; 
 } 
 
 return -1; 
 } 
 
 
 static int Nok(int a, int b) 
 { 
 for (int i = a; i < b * a; i += a) 
 { 
 if ((i % a == 0) && (i % b == 0)) return i; 
 } 
 
 return -1; 
 
 }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2019, 11:42
Ответы с готовыми решениями:

Вычислить НОК, НОД
Доброго времени суток, Подскажите, как вычислить НОК и НОД для некоторых чисел в общем классе. Данные массива берутся из текстового файла.

Нахождение НОД И НОК
Необходимо создать отдельный класс, в котором рассчитывается НОД И НОК для чисел. В общем классе все сделать могу, а отдельным классом не...

НОД и НОК элементов массива
Всем доброго времени суток. Задача: Составить программу нахождения НОД (НОК) элементов массива Нахождение НОД и НОК двух чисел...

9
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,111
Записей в блоге: 2
09.04.2019, 13:04
jenjan, для поиска НОД используйте алгоритм Евклида - в разделе много его реализаций.
После нахождения НОД определить НОК можно по формуле: a * b / НОД(a, b)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,111
Записей в блоге: 2
09.04.2019, 13:04
jenjan, НОД по алгоритму Евклида с проверкой параметров (если будут переданы отрицательные или ноль)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 static int Nod(int a, int b) 
 {
     a = a < 0 ? -a : a;
     b = b < 0 ? -b : b;
     int min = a > b ? b : a; 
     if (min <= 1)
         return min;
     int max = a > b ? a : b; 
     int mod = max % min;
     if (mod == 0)
            return min;
     return Nod (min, mod);
}
Пишу здесь - без студии, по памяти.
Могут быть мелкие ошибки.

Этот алгоритм многократно быстрее прямого перебора.
Для больших числе разница в тысячи и миллионы раз.
0
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 16
07.05.2019, 16:32
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
namespace NOD
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 55;
            int b = 50;
 
            Console.WriteLine(NOD(a, b));
            Console.WriteLine(NODRec(a, b));
        }
 
        private static int NOD(int a, int b)
        {
            while (a != b)
                if (a > b) a -= b; else b -= a;
            return a;
        }
        private static int NODRec(int a, int b)
        {
            if (a != b)
            {
                if (a > b) a = NODRec(a - b, b);
                else a = NODRec(a, b - a);
            }
            return a;
        }
    }
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,111
Записей в блоге: 2
07.05.2019, 20:03
Azona, это неправильная реализация!
Попробуйте проверить с исходными данными
C#
1
2
            int a = int.MaxValue;
            int b = 2;
или с такими
C#
1
2
            int a = 1;
            int b = -1;
0
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 16
07.05.2019, 20:09
Да вижу, добавить ограничение и все
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,111
Записей в блоге: 2
07.05.2019, 20:19
Цитата Сообщение от Azona Посмотреть сообщение
Да вижу, добавить ограничение и все
Нет!
Просто надо реализовывать алгоритм Евклида, а не изобретать велосипед с квадрантными колёсами.
0
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 16
07.05.2019, 20:21
"напишите различные методы реализации вычисления НОК, НОД "
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,111
Записей в блоге: 2
07.05.2019, 20:26
Цитата Сообщение от Azona Посмотреть сообщение
"напишите различные методы реализации вычисления НОК, НОД "
Значит ещё поищите, но ни как не вычитание использовать.

Добавлено через 1 минуту
ВикиЭффективными способами вычисления НОД двух чисел являются алгоритм Евклида и бинарный алгоритм.

Кроме того, значение НОД(m,n) можно легко вычислить, если известно каноническое разложение чисел {\displaystyle m} m и {\displaystyle n} n на простые множители:
0
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 16
08.05.2019, 11:14
Вообще у меня и есть алгоритм Евклида, только нужно взять числа по модулю ибо -1 вообще смысл толкать туда нет. А про предел int- ов не вижу криминала. Сделайте long, ваш алгоритм тоже не работает при значении int.MaxValue+1.
Мой метод зато смотрится изящнее)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2019, 11:14
Помогаю со студенческими работами здесь

НОД и НОК, двумерный массив
Ребзяяя, помогите, есть прога на нахождение наибольшего общего делимого(НОД) и наибольшего общего кратного(НОК). Но заданна как в двумерном...

Нахождение НОД и НОК в длинной арифметике
Всем привет. Дали задание написать программу для нахождения НОД и НОК двух чисел, но в длинной арифметике, т.е. чтобы НОД и НОК находились...

Разработать 4 метода вычисления НОД и НОК
Разработать 4 метода вычисления наибольший общего делитель и наибольшее общее кратное двух заданных c клавиатуры натуральных чисел. Что...

Составить программу для НОД и НОК
Приветствую друзья, помогите пожалуйста. Желательно с объяснениями. Составить программу для нахождения наибольшего общего делителя и...

НОД, НОК - программа выдает неверные результаты
помогите! почему программа не правильно работает? :) private static void ebob_ekob(int eded1,int eded2,int ebob,int ekob,int n,int m) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru