Линейное представление наибольшего общего делителя (функция ExtendedGCD)
Пример 6.10.
Линейное представление наибольшего общего делителя чисел аn -1 и аm -1. Наибольший общий делитель чисел а" -1 и а" -1, запись которых в системе счисления с основанием а состоит из и цифр и из т цифр , является числом того же вида, причем количество цифр я-1 в нем равно d= НОД(n, m). Выясним, как наибольший общий делитель чисел аn -1 и аm -1 представляется в виде их линейной комбинации.
Вот нужные нам определения.
aaa[a_, n_] :
=
a
^
n
-
1
;
d :
=
GCD[n, m]
Теперь можно написать и программу. Нужно только не забыть о том, что представление r и s лучше всего получить в системе счисления с основанием я. Для этого вполне подойдет функция IntegerDigits. Она, правда, теряет знак числа, так что его придется печатать отдельно.
Do[ Do[ Do[
{{g,(r,s}}
=
ExtendedGCD[aaa[a,n],aaa[a,m]],
Print[
"###"
, n,
":"
,m,
":"
,d,
":"
,a,
":"
],
If[g
<
0
,Print[
"-"
]],
Print[IntegerDigits[g,a],
":"
],
If[r
<
0
,Print!
"-"
]],
Print[IntegerDigits[r,a],
":"
],
If [s
<
0
,Print[
"-"
]],
Print[IntegerDigits[s,a]]},
{a,
2
,n
+
m
+
2
}],{m,n
-
1
}],{n,
10
}]
Заметьте, что в программе вставлена печать fit для удобства форматирования результатов.
Скажу сразу, что более скучной таблицы я, наверное, никогда не видел! И все из-за удивительного постоянства г и s! Представление r и s выглядит одинаково в системах счисления с разными основаниями, и потому их представления просто повторяются во многих строках! Это значит, что представление наибольшего общего делителя действительно основано на полиномиальных тождествах вида d(x) = r(x)a(x)+s(x)b(x), причем полиномы r(х) и s(x) легко восстанавливаются по числам r и s!
Конечно, я избавлю вас от демонстрации всего этого и просто приведу некоторые наиболее характерные строки таблицы. Разумеется, большинство строк an опустил, и таблица содержит пропуски. Они обозначены строками с многоточиями. Чтобы развеять сомнения, достаточно взглянуть вот на это.
Линейное представление наибольшего общего делителя чисел аn -1 и аm -1:
НОД= r-(an -l) + s-(am -l)
n | m | d= НОД (n, m) | Основание системы счисления а | Цифры НОД в системе счисления с основанием а | Цифры r в системе счисления с основанием а | Цифры s в системе счисления с основанием а |
---|---|---|---|---|---|---|
2 | 1 | 1 | 2 | (1) | {0} | {1} |
2 | 1 | 1 | 3 | {2} | {0} | (1) |
2 | 1 | 1 | 4 | {3} | {0} | {1} |
2 | 1 | 1 | 5 | (1) | {0} | (1) |
3 | 1 | 1 | 2 | {1} | {0} | {1} |
3 | 1 | 1 | 3 | {2} | {0} | {1} |
3 | 1 | 1 | 4 | {3} | {0} | {1} |
3 | 1 | 1 | 5 | {4} | {0} | (1) |
3 | 1 | 1 | 6 | (5) | {0} | {1} |
3 | 2 | 1 | 2 | (1) | {1} | -{1.0} |
3 | 2 | 1 | 3 | (2} | {1} | -{1.0} |
3 | 2 | 1 | 4 | (3) | {1} | -{1.0} |
3 | 2 | 1 | 5 | (4} | {1} | -{1.0} |
3 | 2 | 1 | 6 | (5) | {1} | -{1.0} |
3 | 2 | 1 | 7 | (6) | {1} | -{1.0} |