2015年8月1日土曜日

150801(2)

Ruby


ラマヌジャン予想(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 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。