を満たす素数を探すということは、
Wolstenholme prime を探すということだった。
今のところ、
16843, 2124679
しか見つかっていないようだ。
オンライン整数列大辞典の
A088164(http://oeis.org/A088164/list)
にもこの二つしか載っていない。
require 'prime'
def C(n, r)
r = [r, n - r].min
return 1 if r == 0
return n if r == 1
numerator = (n - r + 1..n).to_a
denominator = (1..r).to_a
(2..r).each{|p|
pivot = denominator[p - 1]
if pivot > 1
offset = (n - r) % p
(p - 1).step(r - 1, p){|k|
numerator[k - offset] /= pivot
denominator[k] /= pivot
}
end
}
result = 1
(0..r - 1).each{|k|
result *= numerator[k] if numerator[k] > 1
}
return result
end
Prime.each(500000).to_a.each{|pr|
p pr if C(2 * pr, pr) % (pr * pr * pr * pr) == 2
}
require 'prime'
def C(n, r)
r = [r, n - r].min
return 1 if r == 0
return n if r == 1
numerator = (n - r + 1..n).to_a
denominator = (1..r).to_a
(2..r).each{|p|
pivot = denominator[p - 1]
if pivot > 1
offset = (n - r) % p
(p - 1).step(r - 1, p){|k|
numerator[k - offset] /= pivot
denominator[k] /= pivot
}
end
}
result = 1
(0..r - 1).each{|k|
result *= numerator[k] if numerator[k] > 1
}
return result
end
pr = 2124679
# 条件を満たすならば出力
p pr if C(2 * pr, pr) % (pr * pr * pr * pr) == 2