SSブログ

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
──────────


HL004.JPG

─────

#! 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

─────
 


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

2乗した数(Ruby)相隣る数の積 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。