2015年6月25日木曜日

150625

Ruby


ROT13 と ROT47

変換された文字列をもう一度変換すると、元の文字列に戻るか試してみる。

str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
# ROT13
p str.tr("A-Za-z", "N-ZA-Mn-za-m")
p str.tr("A-Za-z", "N-ZA-Mn-za-m").tr("A-Za-z", "N-ZA-Mn-za-m")
p str.tr("\x41-\x5a\x61-\x7a", "\x4e-\x5a\x41-\x4d\x6e-\x7a\x61-\x6d")
p str.tr("\x41-\x5a\x61-\x7a", "\x4e-\x5a\x41-\x4d\x6e-\x7a\x61-\x6d").tr("\x41-\x5a\x61-\x7a", "\x4e-\x5a\x41-\x4d\x6e-\x7a\x61-\x6d")
# ROT47
p str.tr("\x21-\x7e", "\x50-\x7e\x21-\x4f")
p str.tr("\x21-\x7e", "\x50-\x7e\x21-\x4f").tr("\x21-\x7e", "\x50-\x7e\x21-\x4f")

出力結果
"NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
"NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
"pqrstuvwxyz{|}~!\"\#$%&'()*+23456789:;<=>?@ABCDEFGHIJK_`abcdefgh"
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

2015年6月24日水曜日

150624(2)

Ruby


素数を順番につなぎ合わせた数について(4)

i = 60 のときも素数でないことがわかりよろこんでいたが、
すでに調べられていた。
(http://www.asahi-net.or.jp/~KC2H-MSM/mathland/matha1/sm_prime.htm)

150624

Ruby


素数を順番につなぎ合わせた数について(3)

150621(3)、150621(4) 分と本質的に変わらないコードを実行した結果
i = 60 のときも(606334586461 で割り切れるので)素数でないことがわかった。

結果のみ
[2, "prime"]
[23, "prime"]
[235, 5]
[2357, "prime"]
[235711, 7]
[23571113, 23]
[2357111317, 11]
[235711131719, 7]
[23571113171923, 61]
[2357111317192329, 3]
[235711131719232931, 17]
[23571113171923293137, 7]
[2357111317192329313741, 25391]
[235711131719232931374143, 6899]
[23571113171923293137414347, 1597]
[2357111317192329313741434753, 3]
[235711131719232931374143475359, 17]
[23571113171923293137414347535961, 3]
[2357111317192329313741434753596167, 1019]
[235711131719232931374143475359616771, 3]
[23571113171923293137414347535961677173, 17]
[2357111317192329313741434753596167717379, 211]
[235711131719232931374143475359616771737983, 41378209]
[23571113171923293137414347535961677173798389, 3]
[2357111317192329313741434753596167717379838997, 479]
[2357111317192329313741434753596167717379838997101, 3]
[2357111317192329313741434753596167717379838997101103, "?"]
[2357111317192329313741434753596167717379838997101103107, 3]
[2357111317192329313741434753596167717379838997101103107109, 107]
[2357111317192329313741434753596167717379838997101103107109113, 3]
[2357111317192329313741434753596167717379838997101103107109113127, 643]
[2357111317192329313741434753596167717379838997101103107109113127131, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137, 7]
[2357111317192329313741434753596167717379838997101103107109113127131137139, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149, 1
3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157, 107069]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163, 7]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167, "?"]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179, 61911427]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191, 13]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197, 31]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211, 11]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223, 59]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227, 7]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229, 647]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233, 31]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241, 13]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257, 31517]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263, 43]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271, 19]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277, 127]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277281, 11]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277281283, 606
334586461]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277281283293,
13]

2015年6月21日日曜日

150621(4)

Ruby


素数を順番につなぎ合わせた数について(2)

もう少し調べてみた。

# -*- coding: cp932 -*-

require 'prime'

p_ary = Prime.each(300).to_a
(0..p_ary.size - 1).each{|i|
  j = p_ary[0..i].join.to_i
  if i == 0
    p [j, 'prime']
  elsif i == 26
    p [j, '262343078386137703以下の何か']
  elsif i == 38
    p [j, '14733071537以下の何か']
  elsif i == 60
    p [j, 'prime?']
  else
    k = Math.sqrt(j).to_i
    l = 3
    while j % l > 0 && l <= k
      l += 2
    end
    if l <= k
      p [j, l]
    else
      p [j, 'prime']
    end
  end
}

出力結果
[2, "prime"]
[23, "prime"]
[235, 5]
[2357, "prime"]
[235711, 7]
[23571113, 23]
[2357111317, 11]
[235711131719, 7]
[23571113171923, 61]
[2357111317192329, 3]
[235711131719232931, 17]
[23571113171923293137, 7]
[2357111317192329313741, 25391]
[235711131719232931374143, 6899]
[23571113171923293137414347, 1597]
[2357111317192329313741434753, 3]
[235711131719232931374143475359, 17]
[23571113171923293137414347535961, 3]
[2357111317192329313741434753596167, 1019]
[235711131719232931374143475359616771, 3]
[23571113171923293137414347535961677173, 17]
[2357111317192329313741434753596167717379, 211]
[235711131719232931374143475359616771737983, 41378209]
[23571113171923293137414347535961677173798389, 3]
[2357111317192329313741434753596167717379838997, 479]
[2357111317192329313741434753596167717379838997101, 3]
[2357111317192329313741434753596167717379838997101103, "262343078386137703以下の
何か"]
[2357111317192329313741434753596167717379838997101103107, 3]
[2357111317192329313741434753596167717379838997101103107109, 107]
[2357111317192329313741434753596167717379838997101103107109113, 3]
[2357111317192329313741434753596167717379838997101103107109113127, 643]
[2357111317192329313741434753596167717379838997101103107109113127131, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137, 7]
[2357111317192329313741434753596167717379838997101103107109113127131137139, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149, 1
3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157, 107069]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163, 7]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167, "14733071537以下の何か"]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179, 61911427]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191, 13]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197, 31]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211, 11]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223, 59]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227, 7]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229, 647]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233, 31]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241, 13]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257, 31517]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263, 43]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269, 3]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271, 19]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277, 127]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277281, 11]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277281283, "pr
ime?"]
[2357111317192329313741434753596167717379838997101103107109113127131137139149151
157163167173179181191193197199211223227229233239241251257263269271277281283293,
13]

150621(3)

Ruby


素数を順番につなぎ合わせた数について(1)

素数を順番につなぎ合わせた数が素数になるか調べる。

require 'prime'

p_ary = Prime.each(100).to_a
(0..p_ary.size - 1).each{|i|
  j = p_ary[0..i].join.to_i
  if i == 0
    p [j, 'prime']
  else
    k = Math.sqrt(j).to_i
    l = 3
    while j % l > 0 && l <= k
      l += 2
    end
    if l <= k
      p [j, l]
    else
      p [j, 'prime']
    end
  end
}

出力結果
[2, "prime"]
[23, "prime"]
[235, 5]
[2357, "prime"]
[235711, 7]
[23571113, 23]
[2357111317, 11]
[235711131719, 7]
[23571113171923, 61]
[2357111317192329, 3]
[235711131719232931, 17]
[23571113171923293137, 7]
[2357111317192329313741, 25391]
[235711131719232931374143, 6899]
[23571113171923293137414347, 1597]
[2357111317192329313741434753, 3]
[235711131719232931374143475359, 17]
[23571113171923293137414347535961, 3]
[2357111317192329313741434753596167, 1019]
[235711131719232931374143475359616771, 3]
[23571113171923293137414347535961677173, 17]
[2357111317192329313741434753596167717379, 211]
[235711131719232931374143475359616771737983, 41378209]
[23571113171923293137414347535961677173798389, 3]
[2357111317192329313741434753596167717379838997, 479]

150621(2)

Ruby


2357

2, 3, 5, 7 を使って素数を作ってみた。
オンライン整数列大辞典の
A019546(http://oeis.org/A019546/list)
と比較し、答え合わせしてみる。

require 'prime'

ary = []
(1..4).each{|i|
  [2, 3, 5, 7].repeated_permutation(i){|c|
    m = c.join.to_i
    ary.push(m) if m.prime?
  }
}
ary = ary[0..47]

# OEIS A019546のデータ
ary0 =
[2,3,5,7,23,37,53,73,223,227,233,257,277,337,353,
 373,523,557,577,727,733,757,773,2237,2273,2333,
 2357,2377,2557,2753,2777,3253,3257,3323,3373,3527,
 3533,3557,3727,3733,5227,5233,5237,5273,5323,5333,
 5527,5557]
# 一致の確認
p ary == ary0

150621

Ruby


f(i) = 2^i + 3^i + 5^i + 7^i

i が自然数のとき、f(i) が素数になるのはどのようなときか
100以下で調べてみた。

# バイナリ法
def power(a, n)
  return 1 if n == 0
  k = power(a, n >> 1)
  k *= k
  return k if n & 1 == 0
  return k * a
end

=begin
i = 79 のとき素数かどうかで時間がかかる。ちなみにこのとき、
j = 5790887942465741731117612854834794040914070728974646702390797618223
=end
(1..100).each{|i|
  j = power(2, i) + power(3, i) + power(5, i) + power(7, i)
  k = Math.sqrt(j).to_i
  # jは2で割り切れない
  l = 3
  while j % l > 0 && l <= k
    l += 2
  end
  if l <= k
    p [i, l]
  else
    p [i, 'prime', j]
  end
}

出力結果
[1, "prime", 17]
[2, 3]
[3, "prime", 503]
[4, 3]
[5, 11]
[6, 3]
[7, 149]
[8, 3]
[9, 19]
[10, 3]
[11, 13]
[12, 3]
[13, 79]
[14, 3]
[15, 11]
[16, 3]
[17, 17]
[18, 3]
[19, "prime", 11417969834487023]
[20, 3]
[21, 1603919]
[22, 3]
[23, 13]
[24, 3]
[25, 11]
[26, 3]
[27, 19]
[28, 3]
[29, 55313]
[30, 3]
[31, 1901]
[32, 3]
[33, 17]
[34, 3]
[35, 11]
[36, 3]
[37, 149]
[38, 3]
[39, 67]
[40, 3]
[41, 83]
[42, 3]
[43, 47]
[44, 3]
[45, 11]
[46, 3]
[47, 13]
[48, 3]
[49, 17]
[50, 3]
[51, 103]
[52, 3]
[53, 19]
[54, 3]
[55, 11]
[56, 3]
[57, 229]
[58, 3]
[59, 13]
[60, 3]
[61, 139]
[62, 3]
[63, 19]
[64, 3]
[65, 11]
[66, 3]
[67, 2377]
[68, 3]
[69, 101]
[70, 3]
[71, 13]
[72, 3]
[73, 17333]
[74, 3]
[75, 11]
[76, 3]
[77, 23]
[78, 3]
[79, 1483384709]
[80, 3]
[81, 17]
[82, 3]
[83, 13]
[84, 3]
[85, 11]
[86, 3]
[87, 1741]
[88, 3]
[89, 19]
[90, 3]
[91, 79]
[92, 3]
[93, 223]
[94, 3]
[95, 11]
[96, 3]
[97, 17]
[98, 3]
[99, 19]
[100, 3]

以上より、
2 + 3 + 5 + 7 = 17(素数)
2^3 + 3^3 + 5^3 + 7^3 = 503(素数)
2^19 + 3^19 + 5^19 + 7^19 = 11417969834487023(素数)

なお、Prime Curious! の2357のページ(http://primes.utm.edu/curios/page.php/2357.html)には
2^1013 + 3^1013 + 5^1013 + 7^1013 は素数
と載っている。

2015年6月20日土曜日

150620(2)

Ruby


i (1以上9以下)を含むならば、i が i 個含む数の個数について(2)

条件を満たすd桁のものの個数を出力してみる。
なお、10進法の場合については
オンライン整数列大辞典のA127007に載っている。

def factorial(m)
  (1..m).inject(:*)
end

def c(d, ary)
  factorial(d) / ary.map{|m| factorial(m)}.inject(:*)
end

N = 10
(2..N).each{|n|
  h = {}
  (1..n - 1).each{|i|
    # i個の文字を使用
    (1..n - 1).to_a.combination(i){|ary|
      d = ary.inject(:+)
      h.key?(d) ? h[d] = h[d].push(ary) : h[d] = [ary]
    }
  }
  s = 0
  (1..n * (n - 1) / 2).each{|d|
    t = 0
    h[d].each{|ary|
      td = c(d, ary)
      s += td
      t += td
    }
    p t
  }
  # 条件をみたす数の個数
  p [n, s]
}

出力結果
1
[2, 1]
1
1
3
[3, 5]
1
1
4
4
10
60
[4, 80]
1
1
4
5
15
75
140
280
1260
12600
[5, 14381]
1
1
4
5
16
81
161
504
1890
16380
34650
110880
360360
2522520
37837800
[6, 40885253]
1
1
4
5
16
82
168
532
2226
17430
42042
185724
636636
4036032
47297250
131171040
428828400
2058376320
9777287520
97772875200
2053230379200
[7, 2163451135829]
1
1
4
5
16
82
169
540
2262
17910
43692
198396
777348
4612608
50720670
156636480
767807040
3396320928
19135548432
147124897920
2522540180160
8066262204000
32157498653280
148419224553600
989461497024000
6431499730656000
86825246363856000
2431106898187968000
[8, 2525544441942679544]
1
1
4
5
16
82
169
541
2271
17955
44352
200871
797940
4858854
51808185
163586280
822796260
4180026708
22437877176
172116842040
2680722724680
9541235864160
57026553243660
263620813135680
1819902396312000
11737487008447200
129307599049028400
2888386529037609600
10827108221572843200
47211227710346700000
253681663563596268000
1561117929622130880000
13737837780674751744000
116771621135735389824000
2043503369875369321920000
73566121315513295589120000
[9, 75742010013818779294524291]
1
1
4
5
16
82
169
541
2272
17965
44407
201751
801515
4890886
52218595
165519640
835947970
4290442728
24096524166
179566203960
2739764737710
9938147178960
60997160143920
331360222255920
2154105076695000
14308355062630200
148898652724750500
3043362702904524000
12550859255187653400
85564729840752162000
446033694177751680000
3160644316242901488000
23904928042959835872000
212227787619709557696000
2872257514324824658032000
85739562818913709978272000
359325740171513750386752000
1764944667656072549494848000
10004773552120178696264400000
69366429961366572294099840000
546927620849236435395787200000
6125589353511448076432816640000
65850085550248066821652778880000
1448701882105457470076361135360000
65191584694745586153436251091200000
[10, 66712890763701234740813164553708284]

150620

Ruby


i (1以上9以下)を含むならば、i が i 個含む数の個数について(1)

i (1以上9以下)を含むならば、i が i 個含む数について
オンライン整数列大辞典のA108571に載っている。
また、この条件をみたす数の個数は
66712890763701234740813164553708284
であることも載っている。
さて、N進法のとき条件をみたす数の個数を求めてみる。

def factorial(m)
  (1..m).inject(:*)
end

def c(ary)
  sum = 0
  p = 1
  ary.each{|m|
    sum += m
    p *= factorial(m)
  }
  factorial(sum) / p
end

N = 20
(2..N).each{|n|
  s = 0
  (1..n - 1).each{|i|
    # i個の文字を使用
    (1..n - 1).to_a.combination(i){|ary|
      s += c(ary)
    }
  }
  p [n, s]
}

出力結果
[2, 1]
[3, 5]
[4, 80]
[5, 14381]
[6, 40885253]
[7, 2163451135829]
[8, 2525544441942679544]
[9, 75742010013818779294524291]
[10, 66712890763701234740813164553708284]
[11, 1942822997165179351555175450239287744555392665]
[12, 2080073366819317156363661211242237402694399273780324072649]
[13, 90119293418056939454016830629777394012980315428451803426514614495110994]
[14, 172455511938741999081801502699156952559204424009474834769855450110414719504
150224997558]
[15, 157986102253960981574445206052521197511653328373414551764354038895571390274
01448911234591184156199226978]
[16, 746442030816246157764653429242897250983760556051433948548329751407825856488
15412540158487503830483934552059902954171577605]
[17, 194945695614188169608419067260711262969994712345859557219548670082563980886
14502291258692509506601658052856424259637610563629746085130521420291]
[18, 300275814547418946820910664259718512972412140953192527318957576882139850782
55181991824197487253872154559471957395361481032033404019653356456027127282226298
8138910740]
[19, 289899468213502373867902815950578001530607279689328109339320546553053002418
86575154255270349007564269427340241998153036135878840443110759520091417773370119
0727029967708522620675887212828851]
[20, 185783061526404568110804790044210372472519765825214788837615964098447729062
50157408042296617329443569724170810698372794541477017718173686018716815466159770
719024873776518211993768384857812465924625616829947997242136]

2015年6月14日日曜日

150614

Conway-Guy sequence(2)

今日、「数論〈未解決問題〉の事典」の
「C8 部分集合の元の和が異なる場合」
という部分で

予想を証明したという声明がいくつか出されたが,すべて誤りであった.

という記述があったので、びっくりしたが、
この本は2004年にでた本で、
OEISのCOMMENTSには、

This conjecture has apparently now been proved by Bohman. - I. Halupczok (integerSequences(AT)karimmi.de), Feb 20 2006

とあるので、後者を信用することにしておこう。

2015年6月13日土曜日

150613(2)

Ruby


双子素数と隣り合う双子素数の和

双子素数については、
オンライン整数列大辞典の
A001359(http://oeis.org/A001359/list)
と比較し、答え合わせしてみる。

require 'prime'

def A001359(n)
  Prime.each(n).each_cons(2).select{|p, r| r - p == 2}.map{|c| c[0]}
end
ary = A001359(1607 + 2)

# OEIS A001359のデータ
ary0 =
[3,5,11,17,29,41,59,71,101,107,137,149,179,191,
 197,227,239,269,281,311,347,419,431,461,521,569,
 599,617,641,659,809,821,827,857,881,1019,1031,
 1049,1061,1091,1151,1229,1277,1289,1301,1319,1427,
 1451,1481,1487,1607]
# 一致の確認
p ary == ary0

def A(n)
  Prime.each(n).each_cons(2).select{|p, r| r - p == 2}.map{|c| c[0] + c[1]}
end
p A(1607 + 2)

出力結果
true
[8, 12, 24, 36, 60, 84, 120, 144, 204, 216, 276, 300, 360, 384, 396, 456, 480, 5
40, 564, 624, 696, 840, 864, 924, 1044, 1140, 1200, 1236, 1284, 1320, 1620, 1644
, 1656, 1716, 1764, 2040, 2064, 2100, 2124, 2184, 2304, 2460, 2556, 2580, 2604,
2640, 2856, 2904, 2964, 2976, 3216]

150613

Ruby


隣り合う素数の和

オンライン整数列大辞典の
A164653(http://oeis.org/A164653/list)
と比較し、答え合わせしてみる。

require 'prime'

def A164653(n)
  ary = [1, 3]
  ary += Prime.each(n).each_cons(2).map{|c| c[0] + c[1]}
end
ary = A164653(508 / 2 + 3)

# OEIS A164653のデータ
ary0 =
[1,3,5,8,12,18,24,30,36,42,52,60,68,78,84,90,100,
 112,120,128,138,144,152,162,172,186,198,204,210,
 216,222,240,258,268,276,288,300,308,320,330,340,
 352,360,372,384,390,396,410,434,450,456,462,472,
 480,492,508]
# 一致の確認
p ary == ary0

2015年6月7日日曜日

150607(3)

Ruby


Look-and-say sequence

(過去にも書いた気がするが、)オンライン整数列大辞典に
紹介されているPythonのコードをベースに書いてみた。
A005150(http://oeis.org/A005150/list)
と比較し、答え合わせしてみる。

def A005150(n)
  m = 1
  p = '1'
  ary = [1]
  while m < n
    q = ''
    idx = 0
    s = p.size
    while idx < s
      # 塊を見つける
      start = idx
      idx += 1
      while idx < s && p[idx] == p[start]
        idx += 1
      end
      # 塊 = (idx - start個のp[start])
      q = q + (idx - start).to_s + p[start]
    end
    p = q
    ary.push(p.to_i)
    m += 1
  end
  return ary
end
ary = A005150(15)

# OEIS A005150のデータ
ary0 =
[1,11,21,1211,111221,312211,13112221,1113213211,
 31131211131221,13211311123113112211,
 11131221133112132113212221,
 3113112221232112111312211312113211,
 1321132132111213122112311311222113111221131221,
 11131221131211131231121113112221121321132132211331222113112211,
 311311222113111231131112132112311321322112111312211312111322212311322113212221]
# 一致の確認
p ary == ary0

このコードを書いた後、以下の大変短いコードをネットで見つけた。
(http://rosettacode.org/wiki/Look-and-say_sequence#Ruby)

def lookandsay(str)
  str.gsub(/(.)\1*/) {$&.length.to_s + $1}
end
 
num = "1"
10.times do
  puts num
  num = lookandsay(num)
end

150607(2)

Ruby


Mian-Chowla sequence

オンライン整数列大辞典の
A005282(http://oeis.org/A005282/list)
と比較し、答え合わせしてみる。

N = 50
ary = [1]
s_ary = [2]
m = 2
while ary.size < N
  s_ary0 = []
  size = 0
  ary.each{|i|
    j = m + i
    break if s_ary.include?(j)
    s_ary0.push(j)
    size += 1
  }
  if size == ary.size
    j = m + m
    if !s_ary.include?(j)
      s_ary0.push(j)
      # m以下のs_aryの要素は以後使わないので、除いておく
      s_ary = (s_ary + s_ary0).select{|k| k > m}
      ary.push(m)
    end
  end
  m += 1
end

# OEIS A005282のデータ
ary0 =
[1,2,4,8,13,21,31,45,66,81,97,123,148,182,204,252,
 290,361,401,475,565,593,662,775,822,916,970,1016,
 1159,1312,1395,1523,1572,1821,1896,2029,2254,2379,
 2510,2780,2925,3155,3354,3591,3797,3998,4297,4433,
 4779,4851]
# 一致の確認
p ary == ary0

150607

Ruby


各桁の和と自身との和について

(「ピーター・フランクルの中学生でも分かる大学生にも解けない数学問題集②」
CHAPTER3のProblem4の一般化から)

自然数nをp進法で表したときの各桁の数の和をf(n)で表す。
a + f(a) = b + f(b) = c + f(c)
を満たすような,3つの異なる自然数a,b,cは存在だろうか。

元々は p = 10 で、
a = 10^13 - 108,
b = 10^13 - 99,
c = 10^13
等が条件を満たす。

さて、これを p < 8 のとき、力づくで解いた。

M = 7
N = 13

def f(i, m)
  return i if i < m
  s = 0
  s += i % m + f(i / m, m)
  s
end

(2..M).each{|m|
  h = {}
  (1..m ** N).each{|i|
    j = i + f(i, m)
    h.key?(j) ? h[j] = h[j].push(i) : h[j] = [i]
    if h[j].size == 3
      p [m, h[j].map{|k| k.to_s(m)}]
      break
    end
  }
}

出力結果
[2, ["1111011", "1111100", "10000000"]]
[3, ["212", "220", "1000"]]
[4, ["3333232", "3333301", "10000000"]]
[5, ["34", "41", "100"]]
[6, ["555555452", "555555501", "1000000000"]]
[7, ["55", "61", "100"]]

2015年6月3日水曜日

150603

Ruby


塊の個数

「ホワイト・ブロック」問題(http://riverplus.net/misc/20150531/)
とほとんど変わらないが、次の問題を考える。

m 色の石を n 個並べるとき、連続した石の塊の個数の期待値を
求めよ

E(n + 1) = (E(n) + 1) × (m - 1) / m E(n) × 1 / m = E(n) + (m - 1) / m
E(1) = 1
より、
E(n) = ((m - 1) n + 1) / m
と求まるが、
あえて地道に数える方法は以下のとおりである。

# (色を区別せず)塊を数える
def cnt(ary)
  s = 1
  ary.each_cons(2){|a| s += 1 if !(a[0] == a[1])}
  s
end

m, n = 2, 6
sum, x = 0, 0
(1..m).to_a.repeated_permutation(n){|c|
  sum += cnt(c)
  x += 1
}
# 塊の個数の期待値
p (sum + 0.0) / x

出力結果
3.5