2乗して1を足した数(Ruby) [Ruby]
x^2+1の列を、xが1から50まで、Rubyのプログラムで下記のとおり計算しました。
1.xが奇数のときは2で割り切れ、他は奇数である
2.xの一の位が2、3、7、8のときは5で割り切れる
3.2以上の素因数は、5、13、17、……といった、4で割ると1余る素数ばかりで、3、7、11、……といった、4で割ると3余る素数は現れない(?)
4.5、13、17、……といった4で割ると1余る素数はどこかに現れる(?)
5.同じ素数は2乗までしか現れない(?)
(?)がついているのは、本当かな、という意味だそうです。すなわち当面、観察した事実がないし予測にすぎないということのなのです。
このうち5番は誤りです。50より大きな数を計算すると、
57^2 + 1 = 3250 = 2 * 5 * 5 * 5 * 13
68^2 + 1 = 4625 = 5 * 5 * 5 * 37
182^2 + 1 = 33125 = 5 * 5 * 5 * 5 * 53
239^2 + 1 = 57122 = 2 * 13 * 13 * 13 * 13
など、5番が早合点だと示す例が現れます。
このように実験例が不十分だったための失敗を、多少皮肉をこめて「少数の法則」(これは、ほんの少数の標本から発生した結果を、全体の結果も同じようなものになるだろうと錯覚してしまう現象です)とよぶことがあるそうです。
3番と4番については、別の記事で解説したいと思います。
(by 心如)
──────────
1^2 + 1 = 2 = 2
2^2 + 1 = 5 = 5
3^2 + 1 = 10 = 2 * 5
4^2 + 1 = 17 = 17
5^2 + 1 = 26 = 2 * 13
6^2 + 1 = 37 = 37
7^2 + 1 = 50 = 2 * 5 * 5
8^2 + 1 = 65 = 5 * 13
9^2 + 1 = 82 = 2 * 41
10^2 + 1 = 101 = 101
11^2 + 1 = 122 = 2 * 61
12^2 + 1 = 145 = 5 * 29
13^2 + 1 = 170 = 2 * 5 * 17
14^2 + 1 = 197 = 197
15^2 + 1 = 226 = 2 * 113
16^2 + 1 = 257 = 257
17^2 + 1 = 290 = 2 * 5 * 29
18^2 + 1 = 325 = 5 * 5 * 13
19^2 + 1 = 362 = 2 * 181
20^2 + 1 = 401 = 401
21^2 + 1 = 442 = 2 * 13 * 17
22^2 + 1 = 485 = 5 * 97
23^2 + 1 = 530 = 2 * 5 * 53
24^2 + 1 = 577 = 577
25^2 + 1 = 626 = 2 * 313
26^2 + 1 = 677 = 677
27^2 + 1 = 730 = 2 * 5 * 73
28^2 + 1 = 785 = 5 * 157
29^2 + 1 = 842 = 2 * 421
30^2 + 1 = 901 = 17 * 53
31^2 + 1 = 962 = 2 * 13 * 37
32^2 + 1 = 1025 = 5 * 5 * 41
33^2 + 1 = 1090 = 2 * 5 * 109
34^2 + 1 = 1157 = 13 * 89
35^2 + 1 = 1226 = 2 * 613
36^2 + 1 = 1297 = 1297
37^2 + 1 = 1370 = 2 * 5 * 137
38^2 + 1 = 1445 = 5 * 17 * 17
39^2 + 1 = 1522 = 2 * 761
40^2 + 1 = 1601 = 1601
41^2 + 1 = 1682 = 2 * 29 * 29
42^2 + 1 = 1765 = 5 * 353
43^2 + 1 = 1850 = 2 * 5 * 5 * 37
44^2 + 1 = 1937 = 13 * 149
45^2 + 1 = 2026 = 2 * 1013
46^2 + 1 = 2117 = 29 * 73
47^2 + 1 = 2210 = 2 * 5 * 13 * 17
48^2 + 1 = 2305 = 5 * 461
49^2 + 1 = 2402 = 2 * 1201
50^2 + 1 = 2501 = 41 * 61
──────────
─────
#! ruby -Ks
#
# 2012.04.09 ───── coded by 心如
# 素因数分解
def factorize(n)
ans = Array.new
tbl = [1, 2, 2, 4]
i, d = 0, 2
while(n / d >= d)
if(n % d == 0)
n = n / d
ans << d
else
d = d + tbl[i]
i += (i == 3) ? -1 : 1
end
end
ans << n
end
# 引数の二乗に1を足したものと、その素因数分解を表示する
def print_n2p1(n)
x = n ** 2 + 1
printf(" %d^2 + 1 = %d = ", n, x)
puts factorize(x).join(" * ")
end
# メイン・ルーチン
sep = "──────────"
puts sep
(1..50).each do |n|
print_n2p1(n)
end
puts sep
[57,68,182,239].each do |n|
print_n2p1(n)
end
puts sep
─────
コメント 0