整数問題(^^)
http://acm.pku.cn/JudgeOnline/showproblem?problem_id=2720
ようするに b i n からタワーを使って書くと
(Knuth's up-arrow notation)
b^^i `mod` 10^n
を求めたまえ、ということ。
(^^) b 0 = 1 (^^) b i = b ^ (b ^^ (i-1)) g b i n = b^^i `mod` 10^n
顔に見えてしまう(顔。
さてさて。
id:tanakhさんの[ICPC]Last Digits より。
定理1:累乗の下位桁の周期に関する定理
∃a, ∀b>=a, ∀n>=2, ∀x, x^b ≡ x^(b+10^n) (mod 10^n)
texで書き直すと、
これはぱっと見反例がありますね。
とすれば、なのに対して、ですから。
さて。じゃあ、この定理をどのように料理しましょうか。そりゃ、xが10と互いに素の時とそうでないときに分けるのが基本でしょう。
どうみたって、主役はオイラー・フェルマーの定理ですね。平方剰余がダークホースかなと思っていたら出場すらしなくて、帰納法が片をつけてくれました。
フェルマーの小定理の復習から。
pを素数、aをpと互いに素な数とする。このとき、
オイラーの定理と一緒に証明しちゃう。
nを正整数とする。(はaとbの最大公約数)このとき、
はい。
証明。
がユークリッド整域なのでPIDで、からがいえる。さらに、なのでがいえ、これらが同値であることが分かる。
よって、がの位数で、
となるような a から生成されるの部分群の位数はの約数であることから。
こうなりますと、xが10と互いに素のときとそうでないときで分けるのが自然。
xが10と互いに素のとき
互いに素の時には、の上で x に逆元が存在するので
としても一般性を失わないのでこれを示す。
Euler's law でざっくりやると。
となる。
ここで、突然、ずっと楽な方法を思いついてしまったので、方針転換して孫氏定理(中国剰余定理)を使います。
は
と
の両方を示せばよい。
オイラーの定理から、
と
が成立するので、すぐに上がいえて終了。
さて、