Последние сто цифр равны 5690012597958236757558633467085120672027553533794679994830406632999597604793962091207504272460937501, если найдены верно.
Вот наипрямейшая реализация, которую можно сильно улучшить. Срабатывает у меня за доли секунды.
Код:
MatrixPowerMod[m_, 0, n_] := Mod[IdentityMatrix[Length[m]], n]
MatrixPowerMod[m_, p_Integer?Positive, n_] :=
Block[
{t = MatrixPowerMod[m, Floor[p/2], n]},
If[
EvenQ[p],
Mod[t.t, n],
Mod[t.t.m, n]
]
]
(* Как использовано: *)
Block[
{$RecursionLimit = 1024},
MatrixPowerMod[{{0, 1}, {1, 1}}, 10^100, 10^100][[2, 2]]
]
Как видно, если рекурсию преобразовать в цикл, будет проще работать с этой махиной — не будет
$RecursionLimit::reclim (а было — стандартных 256 итераций не хватает).
-- Пн июн 11, 2012 17:16:34 --Кстати, возможно, я номер числа перепутал и он должен быть на 1 больше-меньше.
-- Пн июн 11, 2012 17:19:03 --Первое определение в
MatrixPowerMod нужно для модулей не из
.