29 lines
869 B
Text
29 lines
869 B
Text
ClearAll["Global`*"];
|
|
|
|
pisanos = <||>;
|
|
pisano[p_] := Module[{lastn, n, i}, If[p < 2, Return[1]];
|
|
i = pisanos[p];
|
|
If[i > 0, Return[i]];
|
|
lastn = 0; n = 1;
|
|
For[i = 1, i <= p^2, i++, {lastn, n} = {n, Mod[lastn + n, p]};
|
|
If[lastn == 0 && n == 1, pisanos[p] = i;
|
|
Return[i]]];
|
|
Return[1]]
|
|
|
|
pisanoprime[p_, k_] := Module[{}, Assert[PrimeQ[p]];
|
|
p^(k - 1)*pisano[p]]
|
|
|
|
pisanotask[n_] := Module[{factors}, factors = FactorInteger[n];
|
|
Map[pisanoprime[#[[1]], #[[2]]] &, factors] // Apply[LCM, #] &]
|
|
|
|
Do[If[PrimeQ[i],
|
|
Print["pisanoPrime[", i, ", 2] = ", pisanoprime[i, 2]]], {i, 1, 15}]
|
|
|
|
Do[If[PrimeQ[i],
|
|
Print["pisanoPrime[", i, ", 1] = ", pisanoprime[i, 1]]], {i, 1, 180}]
|
|
|
|
Print["\nPisano[n] for n from 2 to 180:"];
|
|
Print[Table[pisano[i], {i, 2, 180}]]
|
|
|
|
Print["\nPisano[n] using pisanoPrime for n from 2 to 180:"];
|
|
Print[Table[pisanotask[i], {i, 2, 180}]]
|