p=2ならば、条件を満たす組は(x,y)=(1,1)のみです。
また、mod 4においてx2,y2≡0,1より、x2+y2≡0,1,2です。よって、p≡3(mod 4)の場合、x2+y2=pとなるような(x,y)の組は存在しません。
そのため、以下ではp≡1(mod 4)の場合を考えます。この時、オイラーの規準より、r2≡−1(mod p)かつ1≤r<2pを満たす整数rが存在します。具体的なrの求め方は以下の通りです。
- まず、1≤z≤p−1を満たす整数zをランダムに1つ選択します。
- 次に、mod pにおいてz2p−1≡1とz2p−1≡−1のどちらが成立するかを判定します。なお、オイラーの規準より、z2p−1≡1であることは、zがpの平方剰余となる、すなわちs2≡z(mod p)を満たす整数sが存在することと同値です。奇素数pに対してpの平方剰余は2p−1個存在するので、z2p−1≡1となる確率は21です。よって、z2p−1≡−1となる確率も21なので、z2p−1≡−1となるzは平均2回の試行で見つかります。
- z2p−1≡−1となるzが見つかった場合、r≡z4p−1とすれば、r2≡z2p−1≡−1となります。最後に、r>2pの場合は、r←p−rとすれば1≤r<2pとなり、かつr2≡−1(mod p)も成立します。
この時、k=pr2+1とすると、12+r2=kpとなります。また、この時k≤2pも成立します。
次に、x2+y2=kpかつ2≤k≤2pを満たす整数(x,y,k)の組から、(x′)2+(y′)2=k′pかつ1≤k′≤2kを満たす整数(x′,y′,k′)の組を生成するアルゴリズムPを考えます。
アルゴリズムPの手順
- x=ak+b,y=ck+dとします。ただし、a,b,c,dは全て整数であり、また∣b∣,∣d∣≤2kが成り立っているものとします。
- この時、mod kにおいてx2+y2≡b2+d2なので、b2+d2=nk(nは整数)とおけます。このnが1≤n≤2kを満たすことを、以下で証明します。
- b,dは実数なのでb2+d2≥0 ∴nk≥0 ∴n≥0
- n=0と仮定すると、x=ak,y=ckよりx2+y2=(a2+c2)k2 ∴(a2+c2)k2=kp ∴p=k(a2+c2) よって、kはpの約数なので±1,±pのいずれかですが、どれも2≤k≤2pを満たさないので矛盾します。よって、n=0となり、先ほどのn≥0と合わせてn≥1となります。
- ∣b∣,∣d∣≤2kよりb2+d2≤4k2 ∴b2+d2≤2k2 ∴nk≤2k2 ∴n≤2k
- このnについて、np=kb2+d2⋅kx2+y2=k2(b2+d2)(x2+y2)=k2(bx+dy)2+(by−dx)2=(kbx+dy)2+(kby−dx)2=(ab+cd+n)2+(bc−ad)2となります。よって、x′=ab+cd+n,y′=bc−ad,k′=nとすれば、(x′)2+(y′)2=k′pかつ1≤k′≤2kが成立します。
k′≤2kより、アルゴリズムPを適用するごとにkの値は半分以下になっていき、いずれ1に収束するので、x2+y2=pを満たす(x,y)の組が求まります。
r2≡−1(mod p)を満たすrの発見に必要な計算量はO(logp)であり、アルゴリズムPの繰り返し回数もO(logp)なので、全体の計算量はO(logp)となります。
参考
本解説で参考にしたサイトは以下の通りです。
質問・誤りがある場合
Twitterに連絡ください。ID : @YS55749378