サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013/03/22

素数の積+1が素数かどうかをプログラムで検証してみた

先日の記事で、素数を小さい順に並べたものの積に1を加えた数が素数かどうかという内容を書きました。今日ふと考えたのが、プログラムを書いて確かめてみようということ。得意のPHPよりRubyの方が簡単ではないかと思いました。

Rubyの本やWebサイトで調べてみると、やはりRubyでは簡単に素数が生成できるようです。こんなプログラムです。

#!/usr/bin/ruby

require 'mathn'

product = 1
productString = ''

gen = Prime.new
gen.each do |prime|
product *= prime
productString << '*' if productString != ''
productString << prime.to_s
euclidPrime = product + 1
printf("%s+1 = %d : ", productString, euclidPrime)
p euclidPrime.prime_division
break if prime >= 29
end

私のPC環境ではRuby1.8.4なのでmathnを使っていますが、1.9以降だとEnumerableを使うらしい。このプログラムの結果は、

2+1 = 3 : [[3, 1]]
2*3+1 = 7 : [[7, 1]]
2*3*5+1 = 31 : [[31, 1]]
2*3*5*7+1 = 211 : [[211, 1]]
2*3*5*7*11+1 = 2311 : [[2311, 1]]
2*3*5*7*11*13+1 = 30031 : [[59, 1], [509, 1]]
2*3*5*7*11*13*17+1 = 510511 : [[19, 1], [97, 1], [277, 1]]
2*3*5*7*11*13*17*19+1 = 9699691 : [[347, 1], [27953, 1]]
2*3*5*7*11*13*17*19*23+1 = 223092871 : [[317, 1], [703763, 1]]
2*3*5*7*11*13*17*19*23*29+1 = 6469693231 : [[331, 1], [571, 1], [34231, 1]]

なんと!初めの5つは素数ですが、以降は合成数(素数でない数)が続いています。これは素数列ではありませんね。ちなみに29より後まで検証しようとすると、Rubyで扱う整数がオーバーフローするのか、いつまで経っても結果が表示されませんでした。

Rubyに慣れてないせいで、この程度のプログラムでマニュアルに首っ引きでした。まあ数学の勉強というより、Rubyの勉強でした。

P.S. 明日の記事でプログラムを書き換えています。そちらの方がいい。

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1507-b09cbdf8

■  カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。