Да не "в лом", можно и помочь, не жалко, просто настроение что то неважное..
Я тут "выкопал" с дальней полки учебник "ФОРТ", но там этой программы нема.. Значит в другом учебнике - точно помню, что на форте был пример. Зато в этом оказался учебный пример программы - "генератор бессмысленных сообщений"

"Прикольно"- выдаёт нечто вроде : "
В ДАННОМ СООБЩЕНИИ МЫ РАССКАЖЕМ ВАМ О ТОМ ЧТО ВКЛАДЫВАЯ ИМЕЮЩИЕСЯ В НАЛИЧИИ СРЕДСТВА В ИНТЕГРИРОВАННЫЙ ЦИФРОВОЙ КОМПЛЕКС ПРИМЕНЯЯ АВТОНОМНЫЙ КУЛЬТУРНЫЙ ПРОДУКТ ПРЕДСТАВЛЯЕТСЯ ВОЗМОЖНЫМ ДАЖЕ НЕСМОТРЯ НА КВАЛИФИЦИРОВАННЫЙ ЦИФРОВОЙ ПРОЕКТ ЕЩЁ БОЛЬШЕ УКРЕПИТЬ УНИКАЛЬНЫЙ ПРОГРАММНЫЙ ОБЪЁМ". ну и т.д.
Ещё пошукаю. Если найду - выложу.
Ещё можно в WWW попробовать запрос "оптимальный алгоритм нахождения н.о.д." Пока нашлось вот это :
Спойлер
Методы нахождения НОД и НОК чисел
/фио/
/фио/
МОУ СОШ № x
6б класс
Руководитель
/фио/
В школьном курсе математики нахождение наибольшего общего делителя (НОД), наименьшего общего кратного (НОК), наименьшего общего знаменателя и дополнительных множителей для дробей предлагается через разложение чисел на простые множители. Это связано с большим количеством однообразных механических вычислений.
Быстрое нахождение НОД и НОК чисел необходимо в дальнейшем для нахождения наименьшего общего знаменателя и дополнительных множителей для дробей при сравнении, сложении и вычитании дробей с разными знаменателями.
Цель работы: рассмотреть и оценить все методы нахождения НОД, НОК чисел. С учетом их эффективности, простоты в использовании разработать алгоритм нахождения НОД и НОК для двух и более чисел. Он позволит сделать оптимальный выбор метода.
Зачастую элементарный анализ исходных чисел может привести к быстрому нахождению НОД, НОК этих чисел без разложения на простые множители. С этой целью в работе рассмотрены частные случаи нахождения НОД и НОК чисел, когда исходные числа взаимно простые или когда одно из них кратно другому.
Попытка заменить разложение чисел на простые множители менее затратной процедурой привела к созданию метода одновременного деления. Разложение на множители в этом методе также необходимо, только множители не обязательно должны быть простыми, но обязательно общими. В этом случае количество действий значительно уменьшается, тем самым упрощается нахождение НОД и НОК чисел.
Каждый из предложенных в работе методов имеет свои ограничения, поэтому невозможно обойтись каким-то одним.
Рассмотренные в работе методы нахождения НОД и НОК чисел как частные (для взаимно простых чисел или кратных чисел), так и метод одновременного деления требуют меньшего количества вычислений и просты в применении. Они могут быть использованы в первую очередь для нахождения НОД и НОК двух и более чисел. Они удобны и для нахождения дополнительных множителей при приведении дробей к общему знаменателю. Основным результатом работы можно считать создание алгоритма для оптимально быстрого нахождения НОД и НОК чисел.
Алгоритм нахождения НОД и НОК чисел.
1 шаг. Если числа а, b взаимно простые, то
НОД(а, b) = 1, НОК(а, b) = а?b
2 шаг. Если число а кратно b, то
НОД(а, b) = b, НОК(а, b) = а
3 шаг. Использовать метод одновременного деления.
Одновременное разложение чисел на одинаковые множители до получения взаимно простых чисел.
Для нахождения НОД нужно найти произведение одинаковых множителей.
Для нахождения НОК нужно одно из исходных чисел умножить на оставшееся число в разложении другого числа.
4 шаг. Использовать разложение на простые множители для нахождения НОК для количества чисел более двух.
Не ассемблер, конечно, зато для 6 класса даже подходит..
Попробовал ещё, и не ya.ru , а google и запрос на аглицком..
На запрос "greatest common divisor algorythm"- уже лучше - выдаёт меньше всякой шелухи и даже несколько текстов на "C".
Вот из википедии - пожалуйста :
Iterative version in C++ using ctz (count trailing zeros)
Using a count trailing zeros (CTZ) function can improve the performance of the binary gcd algorithm. A randomly distributed number has an exponentially declining distribution of trailing zeros: 0.50 have no trailing zeros, 0.25 have 1 trailing zeros, 0.125 have 2 trailing zeros, 0.0625 have 3 trailing zeros, .... Iterations are only saved if there are two or more trailing zeros, so the expected number of saved iterations is not large. Although there are occasions where counting trailing zeros can gain a lot in one step, big gains would not be expected unless the numbers had unusual properties.
// ctz(x) counts trailing zeros in x
unsigned int gcd(unsigned int x, unsigned int y)
{
if (x == 0)
return y;
if (y == 0)
return x;
unsigned int cf2 = ctz(x | y);
x >>= ctz(x);
for (;;)
{
y >>= ctz(y);
if (x == y)
break;
if (x > y)
std::swap(x, y);
if (x == 1)
break;
y -= x;
}
return x << cf2;
}
А что сам T.S. ничего не нашёл ещё разве ?