2015年6月14日日曜日

150614

Ruby


Dirichlet's theorem on arithmetic progressions(1)

昨日ウィキで上記記事を見ていたとき、
以下の予想が思い浮かぶ。

まず予想を述べる前に実験してみる。

2 = 3 × 1^2 - 1 = 1 × 1^2 + 1,
3 = 1 × 2^2 - 1 = 2 × 1^2 + 1,
5 = 6 × 1^2 - 1 = 1 × 2^2 + 1,
7 = 2 × 2^2 - 1 = 6 × 1^2 + 1,
11 = 3 × 2^2 - 1 = 10 × 1^2 + 1,
13 = 14 × 1^2 - 1 = 3 × 2^2 + 1,
17 = 2 × 3^2 - 1 = 1 × 4^2 + 1,
19 = 5 × 2^2 - 1 = 2 × 3^2 + 1
(赤文字はなるべく大きな数字になるようにする。)

さて、N = 20以下の素数について上記変形をしたところ、
「 - 1」の方は、1が3個、2が4個、3が1個現れ、
「 + 1」の方は、1が4個、2が2個、3が1個、4が1個現れる。

N を増やすとどうなるか調べるために、以下を実行。

require 'prime'

# nを割り切る最大の平方数を探す
def f(n)
  i = Math.sqrt(n).to_i
  while n % (i * i) > 0
    i -= 1
  end
  i
end

(1..7).each{|i|
  h1 = {}
  h2 = {}
  cnt = 0
  Prime.each(10 ** i){|n|
    l = f(n + 1)
    m = f(n - 1)
    h1.key?(l) ? h1[l] += 1 : h1[l] = 1
    h2.key?(m) ? h2[m] += 1 : h2[m] = 1
    cnt += 1
  }
  # h1, h2 を全部出力させると見にくいので、一部を出力
  p 10 ** i
  p (1..6).map{|j| h1[j] == nil ? 0 : h1[j]}
  p (1..6).map{|j| h2[j] == nil ? 0 : h2[j]}
  p (1..6).map{|j| h1[j] == nil ? 0 : h1[j] / (cnt + 0.0)}
  p (1..6).map{|j| h2[j] == nil ? 0 : h2[j] / (cnt + 0.0)}
}

出力結果
10
[2, 2, 0, 0, 0, 0]
[3, 1, 0, 0, 0, 0]
[0.5, 0.5, 0, 0, 0, 0]
[0.75, 0.25, 0, 0, 0, 0]
100
[8, 9, 3, 3, 0, 1]
[13, 7, 1, 2, 0, 2]
[0.32, 0.36, 0.12, 0.12, 0, 0.04]
[0.52, 0.28, 0.04, 0.08, 0, 0.08]
1000
[59, 52, 12, 13, 2, 9]
[68, 46, 11, 11, 3, 10]
[0.35119047619047616, 0.30952380952380953, 0.07142857142857142, 0.07738095238095
238, 0.011904761904761904, 0.05357142857142857]
[0.40476190476190477, 0.27380952380952384, 0.06547619047619048, 0.06547619047619
048, 0.017857142857142856, 0.05952380952380952]
10000
[462, 343, 83, 92, 24, 61]
[467, 350, 82, 84, 28, 62]
[0.37591537835638733, 0.2790886899918633, 0.06753458096013018, 0.074857607811228
65, 0.01952807160292921, 0.04963384865744508]
[0.3799837266069976, 0.2847843775427177, 0.06672091131000814, 0.0683482506102522
4, 0.022782750203417412, 0.05044751830756713]
100000
[3573, 2703, 655, 673, 164, 477]
[3599, 2688, 636, 672, 195, 479]
[0.3724979149291076, 0.2817973311092577, 0.0682860717264387, 0.07016263552960801
, 0.017097581317764805, 0.04972894078398665]
[0.37520850708924103, 0.28023352793994993, 0.06630525437864887, 0.07005838198498
748, 0.020329441201000834, 0.04993744787322769]
1000000
[29290, 22002, 5205, 5507, 1482, 3954]
[29397, 22055, 5238, 5475, 1500, 3903]
[0.3731305256184871, 0.2802873958572193, 0.06630742184514254, 0.0701546536217483
3, 0.018879461897118397, 0.05037071008178552]
[0.3744936176717878, 0.2809625722948355, 0.06672781472139418, 0.0697469999235649
4, 0.019108767102346557, 0.049721012000305743]
10000000
[248523, 186419, 44187, 46616, 12555, 33134]
[248568, 186430, 44220, 46553, 12565, 33162]
[0.3739555417790812, 0.2805069073804619, 0.06648870939346564, 0.070143654855179,
 0.018891659230881507, 0.049857127595063944]
[0.37402325381933527, 0.28052345921252403, 0.06653836488965195, 0.07004885799882
332, 0.01890670635093796, 0.04989925953122202]

このように N を増えるにつれ、
「 - 1」の方に現れる赤文字の分布と、
「 + 1」の方に現れる赤文字の分布が似てくる。

予想
N → ∞ とすると、
「 - 1」の方に現れる赤文字の分布と
「 + 1」の方に現れる赤文字の分布が一致する。

0 件のコメント:

コメントを投稿