ラマヌジャン予想(4)
「数学の微笑み」山下純一 著 P.294 において、
100000 以下の素数 p について小さいものから順に |τ(p)| / p^5.5 を計算し、
それがそれまでの計算値をこえるごとに記録した
結果が載っているので、ラマヌジャン予想(3)で使ったコードを用いて確認してみた。
(実行時間は1時間45分ほどかかる。)
require 'prime'
# m次以下を取り出す
def mul(f_ary, b_ary, m)
s1, s2 = f_ary.size, b_ary.size
ary = Array.new(s1 + s2 - 1, 0)
s10 = [s1 - 1, m].min
(0..s10).each{|i|
s20 = [s2 - 1, m - i].min
(0..s20).each{|j|
ary[i + j] += f_ary[i] * b_ary[j]
}
}
ary
end
# m次以下を取り出す
def power(ary, n, m)
return [1] if n == 0
k = power(ary, n >> 1, m)
k = mul(k, k, m)
return k if n & 1 == 0
return mul(k, ary, m)
end
def A000594(n)
ary = Array.new(n + 1, 0)
# ヤコビの公式の必要なところだけ取り出す
i = 0
j, k = 2 * i + 1, i * (i + 1) / 2
while k <= n
i & 1 == 1? ary[k] = -j : ary[k] = j
i += 1
j, k = 2 * i + 1, i * (i + 1) / 2
end
# 8乗してx倍
power(ary, 8, n).unshift(0)[1..n]
end
# |t(p)| / p^5.5 の最大値
def ramanujan_conjecture(ary)
max = 0
r_max_ary = []
p_ary = Prime.each(ary.size).to_a
p_ary.each{|p|
t = ary[p - 1]
u = t.abs / p ** 5.5
if max < u
r_max_ary.push([p, t, u])
max = u
end
}
r_max_ary
end
ary = A000594(100000)
p ramanujan_conjecture(ary)
出力結果
[[2, -24, 0.5303300858899106], [3, 252, 0.5987336124929452], [5, 4830, 0.6912133
33204735], [11, 534612, 1.0008729094970374], [17, -6905934, 1.1796504994162533],
[47, 2687348496, 1.7091720053051764], [103, -225755128648, 1.9188140482390927],
[3371, 49278699535832155572, 1.9497821915448013], [3967, 120752806116171238016,
1.9514396698133158], [7451, -3875535882287120935548, 1.9550220658949324], [7589
, 4299215878259436627390, 1.9605332515011487], [16033, 264220524653668368557282,
1.9696324533790046], [18047, -507583894904594239461504, 1.9736958734327261], [3
2233, -12353847812192420408840518, 1.977644573320766], [39089, -3573992494827103
7246368110, 1.9808589644591574], [53593, -203122840455721231884215158, 1.9845606
903237616], [58189, 320344277397080839676063990, 1.990636920097253], [64849, 581
810639436172985553940850, 1.992111303823014], [74471, 12477466757753983133296476
72, 1.996167133105195]]
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。