Иллюстрированный самоучитель по Mathematica 5

Линейное представление наибольшего общего делителя (функция ExtendedGCD)

В ряде задач необходимо найти не только наибольший общий делитель нескольких чисел, но и его представление в виде линейной комбинации этих чисел. Именно эту задачу решает функция ExtendedGCD. Функция ExtendedGCD [ n1, n2,…] возвращает список {g, { r1, r2,…}}, такой, что g= GCD [n1, n2,…] и g = r1n1+r2n2 +…. Вот примеры.

{g,{r,s}} = ExtendedGCD[n = 45, m = 36]
  
(9,{1,-1}}{g,{r,s}} = ExtendedGCD[210 + 3, 350 + 8]
  
{1,{62013782892351778750374,-109502757290992473821761130785} }

Пример 6.7.
Единица как линейная комбинация чисел Ферма. Так как числа Ферма являются взаимно простыми, их наибольший общий делитель равен единице. Выясним, как единица представляется в виде линейной комбинации соседних чисел Ферма.

Вот нужная нам функция.

FermatNumber[n_] := 2 ^ (2 ^ n) - N

Теперь можно написать и программу.

Do[Print[n, ":", ExtendedGCD[FermatNumber[n + 1], FermatNumber[n]]], {n, 10}]

Результаты запишем в виде таблицы.

Заметьте, что в таблице при n>1 числа rn заканчиваются цифрой 8, а числа sn – цифрой 1.

Пример 6.8.
Единица как линейная комбинация чисел 2n-1 и 2m-1 при взаимно простых пит. Так как числа 2n -1 и 2m -1 взаимно просты, если взаимно просты n и m, то единицу можно представить в виде линейной комбинации чисел 2n -1 и 2m -1 при взаимно простых пит. Выясним, до какого номера n(предполагая, что т<п) система Mathematica сможет в приемлемое время проверить взаимную простоту этих чисел.

Вот нужная нам функция.

fn[n_] := 2 ^ n - 1

Теперь можно написать и программу.

Do[Do[If[GCD[n, m] == 1, Print[n, ":", m, ":", ExtendedGCD[fn[n], fn[m]]]], {m, n - 1}], (n, 10}]

Результаты запишем в виде таблицы.

Заметьте, что довольно часто в данной таблице встречается пара r = 1.5= -2. Это не случайно, поскольку при n = n+1 выполняется равенство -(2n -1)+2-(2(n -1) = -1.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.