Большой Воронежский Форум
» Программирование>Как найти наибольший общий делитель для двух чисел?
-=Женек=- 21:54 21.03.2008
Как найти наибольший общий делитель для двух чисел?
Естественно имеется ввиду реализация этого в коде.
Единственное, что сразу приходит на ум - брать наименьшее из двух чисел и делить его на него самого, а потом уменьшать делитель на единицу, пока не получится целое число. Получаем целое число - пробуем на последний делитель делить большее из исходных чисел, и так пока не найдем общий делитель.

Но это сродни сортировке методом "пузырька". Есть что-нибудь проще? [Ответ]
-=Женек=- 21:56 21.03.2008
А вообще - конечная задача - как максимально сократить дробь - одно из данных чисел знаменатель, другое числитель. Делить знаменатель на числитель - не всегда приведет к искомому результату - например дробь 60/100 - как из нее получить 3/5 ? [Ответ]
alexenin 22:34 21.03.2008
Делается через алгоритм простых чисел.
Задача с безконечным решением, потому как дроби бывают большими.
Для меня удобный способ - это написание алгоритма нахождения простых чисел с верхней границей и сохранение их в таблицу.
Берется корень числителя и от него вниз по таблице ищем делители, тоже самое со знаменателем.
Дальше уже ясно. [Ответ]
Part!zan 00:33 22.03.2008
alexenin, не обижайся, но твой вариант говорит о том, что ты черезчур умный )
Алгоритм нахождения НОД давно придуман Евклидом. Алгоритм простой, как 2 копейки: числитель и знаменатель сравниваются и больший из них уменьшается на величину меньшего; делают это до тех пор, пока они не станут равны. Полученное число и есть НОД.

int nod(int a, int b){
if (a<2 || b<2) return 1;
while(a!=b)
if (a>b) a-=b; else b-=a;
return a;
}
[Ответ]
alexenin 16:25 22.03.2008

Сообщение от Part!zan:
alexenin, не обижайся, но твой вариант говорит о том, что ты черезчур умный )

Да, что-то я загнул. Это были сложения дробей. [Ответ]
manifest 17:50 22.03.2008
Ещё один вариант решения:

int func(int x, int y)
{
while(y)
{
int tmp = y;
y = x%y;
x = tmp;
}

return x;
} [Ответ]
Вверх