Алгоритм разложения чисел на простые множители.
Алгоритм А (Разложение на простые множители путем деления). По данному положительному целому числу N этот алгоритм находит простые множители p1 ≤ р2 ≤ … ≤ pt числа N. В этом методе используется вспомогательная последовательность пробных делителей
d = d0 < d1 < d2 < d3 < …,
которая включает в себя все простые числа < (и, если это удобно, может содержать числа, не являющиеся простыми). Последовательность чисел di должна также содержать по крайней мере одно значение, такое, что dk > .
А1. [Начальная установка.] Присвоить t ← 0, k ← 0, n ← N. (В ходе выполнения алгоритма переменные t, k, n подчинены следующим условиям: "n = N/p1...pt и n не имеет простых множителей, меньших dk".)
А2. [n = 1?] Если n = 1, алгоритм заканчивается.
A3. [Разделить.] Присвоить q ← , r ← n mod dk. (Здесь q и r - соответственно частное и остаток от деления числа n на dk.)
А4. [Остаток равен нулю?] Если r ≠ 0, то перейти к шагу А6.
А5. [Множитель найден.] Увеличить t на 1 и присвоить pt ← dk, n ← q. Возвратиться к шагу А2.
А6. [Частное мало?] Если q > dk, увеличить k на 1 и возвратиться к шагу A3.
А7. [n — простое число.] Увеличить t на 1, присвоить pt ← n и завершить выполнение алгоритма.
Рис.32. Алгоритм разложения числа на простые множители.
Пример.
Разложение на простые множители числа N = 25852. Сразу же находим, что N = 2 · 12926; следовательно, р1 = 2. Далее, 12926 = 2 · 6463, так что р2 = 1. Но теперь число n = 6463 не делится на числа 2, 3, 5, ..., 19; находим, что n = 23 · 281; значит, р3 — 23. В итоге имеем 281 = 12 · 23 + 5 и 12 ≤ 23, т. е. р4 = 281.
Алгоритм Евклида.
Разделить целое число a на число b с остатком – это значит найти такие числа q и r c 0 £ r < |b|, при которых выполняется равенство
a = q · b + r.
Разделить многочлен f на многочлен g с остатком – это значит найти такие многочлены q и r c 0 £ deg r < deg g, при которых выполняется равенство
f = q · g + r.
Для вычисления НОД(r0 = a, r1 = b) производится деление с остатком по следующей схеме:
a = r0 = q1r1 + r2,
b = r1 = q2r2 + r3,
.....
rm-2 = qm-1bm-1 + rm,
rm-1 = qmrm.
Работа алгоритма Евклида основана на том, что отображение сохраняет наибольший общий делитель.
Отображение работает до a = НОД, b = 0.
Пример.
НОД(21, 12) = НОД (21 (mod 12), 12) =
= НОД(12, 9) = НОД (12 (mod 9), 9) =
= НОД(9, 3) = НОД (9 (mod 3), 3) =
= НОД(3, 0) = 3
Работа бинарного алгоритма нахождения НОД основана на следующем ряде отображений, также сохраняющих НОД:
Отображения работают до (a – b) /2 = 0. НОД = b.
Пример.
НОД(21, 12) = НОД (21, 12 / 2) =
= НОД(21, 6) = НОД (21, 6 / 2) =
= НОД(21, 3) = НОД ((21 – 3) / 2, 3) =
= НОД(9, 3) = НОД ((9 – 3) / 2, 3) =
= НОД(3, 3) = НОД ((3 – 3) / 2, 3) =
= НОД(0, 3) = 3
Во всех вышеперечисленных рассуждениях принимается a ³ b.
Дата добавления: 2016-02-13; просмотров: 3443;