|
MATHEMATICA
|
Primorial[n_] := Times @@ Prime[Range[n]]
ClearAll[iter]
ClearAll[fracPer, vp];
(*p-adic order*)
vp[p_?PrimeQ, n_Integer] :=
Length@NestWhileList[#/p &, n/p, IntegerQ] - 1;
(*fraction decimal expansion period*)
fracPer[q_Integer] := 0;
fracPer[q_Rational] := Module[{den, p2, p5}, den = Denominator[q];
p2 = vp[2, den];
p5 = vp[5, den];
den = den/2^p2/5^p5;
If[den == 1, 0, MultiplicativeOrder[10, den]]];
iter[{periods_, frac_, n_}] := {{periods, fracPer[#]}, #, n + 1} &[
frac*Primorial[n]/EulerPhi[Primorial[Max[1, n - 1]]]];
Flatten@First@
Nest[iter, {0, Primorial[0]/EulerPhi[Primorial[0]], 0}, 50]
|