読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

(56) Vandiverの判定基準

Fermat予想に対して、Kummerに続いて、Vandiverが、非正則素数pに関して以下を証明したそうです。
のうち、分子が素数pで割り切れるものをとします。
pより大きくp(p-1)より小さい素数で、rp+1(rは自然数)の形に書けるものPがあり、かつ、となる自然数uが存在する場合、
それぞれに対して、

とします。

ならば、素数pの場合のFermatの最終定理が成り立つ。


非正則素数37が上記の条件を満たすかMaximaでチェックしてみましょう。

/* 9.2.14m */
p : 37$
a : [32]$
r : for r : 2 step 2 thru p - 2 do (
  P : r*p + 1,
  if primep(P) then return(r)
  ) - 2$
if primep(P) then print("Prime P = ", P, ", r = ", r)$
u : 2$
if power_mod(u, r, P) # 1 then print("u = 2 works")$
m : (p - 1)/2$
for w : 1 thru length(a) do (
  twok : a[w],
  d : sum(j^(p - twok), j, 1, m),
  Q : mod(power_mod(u, -r*d/2, P)*
    product(power_mod(power_mod(u, r*b, P) - 1, b^(p - 1 - twok), P), b, 1, m), P),
  if power_mod(Q, r, P) # 1 then print("Criterion holds for ", p, ", ", twok)
  )$

Prime P = 149, r = 4
u = 2 works
Criterion holds for 37, 32