Project Euler 130

Problem 130

前回の定義でB(n)は、

10e ≡ 1(mod n)

を満たす最小のe(> 0)としました。これをnの既約剰余類群での10の位数と言います。これを効率的に求めればよいです。

n素因数分解して、

n = p1e1...pmem

とすると、

B(n) = lcm(B(p1e1), ... , B(pmem))

となります。よって、個々のB(pe)を計算すればよいです。オイラーの定理

10φ(pe) ≡ 1(mod pe) (pと10は互いに素)

で、φ(pe) = (p - 1)pe-1なので、B(pe)は(p - 1)pe-1の約数です。例えば、B(169)を考えてみましょう。φ(169) = 12 * 13 = 22 * 3 * 13です。10のべき乗が1になるのにそれぞれの素因数が何個要るか調べます。まず2ですが、1078 ≡ 1で1039 ≡ 168なので、2は1個要ることになります。また、1052 ≡ 146なので3は1個、1012 ≡ 53なので13も1個要ることになります。結局、B(169) = 2 * 3 * 13 = 78となります。

25で0.13s、200で18sでした。