ページ

2014年9月5日金曜日

Project Euler - Problem 457

問題はこちら。

いきなり mod p2 で考えるのはしんどいので、mod p から考える。

f(n)=n23n10 (mod p)

このような n,p の組が見つかった時、以下も成立することが分かる。

f(n±pk)=(n±pk)23(n±pk)1n23n10 (mod p)

以上より、n23n10 (mod p) なる n,p の組があるならば、1p<n も成立する。次に mod p2 について考える。

f(m)=m23m10 (mod p2)f(m=n+pk)=(n+pk)23(n+pk)1n2+2npk+p2k23n3pk12npk3pk+n23n1(2n3)pk+(n23n1)0 (mod p2)

この時、n23n10 (mod p) であるので、両辺を p で割り

(2n3)pk/p+(n231)/p0 (mod p2/p)(2n3)k+(n23n1)/p0 (mod p)

この 1 次合同式を解くことで k を得られ、f(m=n+pk)0 (mod p2) なる m も得られる。そして同様に p3,p4,... の場合も計算可能なことより、以上のこれらの性質から、篩を使うことで N までの区間に存在する素数を、高速に列挙可能でもあることが分かる。

なお、f(n)=n23n10 (mod p) なる n を 1 つ求められているならば

f(pn+3)=(pn+3)23(pn+3)1n22np3n+p2+3p1n23n10 (mod p)

より、もうひとつの p で割り切れる系列を見つけ出すことができる。ただし

f(n=8)=390 (mod p=13)pn+3=138+3=8

のようなパターンもあるため、少しの注意が必要となる。また、mod p=13 については

(283)k+39/130 (mod 13)13k+30 (mod 13)30

と、k が消えてしまうことから、f(13k+8)0 (mod 132) なる k は存在しないことも分かる。

自分の中では普通に解いたつもりだけど、他の人の解き方はわりと違うようだった。なんでや。