「ゴールドバッハの予想」検証 イタつぼ 2005/03/31 20:02:11 └2つ目 イタつぼ 2005/03/31 20:03:21 └こんにちわ。 イタつぼ 2005/04/23 19:43:49 └納得できるプログラム イタつぼ 2005/05/09 00:22:37 └http://www.geocities.jp/ixtutou144/goldb... イタつぼ 2005/09/02 15:16:04
「ゴールドバッハの予想」検証 イタつぼ 2005/03/31 20:02:11 ツリーへ
「ゴールドバッハの予想」検証 |
返事を書く |
イタつぼ 2005/03/31 20:02:11 | |
はじめまして。 私は「ゴールドバッハの予想」を検証するプログラムを書いてみました。 この予想は 6より大きい任意の偶数は、二つの奇素数の和で表すことができる。 6=3+3,8=3+5,10=3+7・・・などです。 プログラムは2つあります。 一つ目 rem *ゴールドバッハの予想 範囲版 2005/3/30 2時 1 print "「ゴールドバッハの予想」検証プログラム" 3 print "調査区間の偶数(4以上)を2つ入力して下さい。" input a,g if mod(a,2)=1 then 3 if mod(g,2)=1 then 3 if a<4 then 3 if a>g then 3 LET t0=time let z=g/2 let w=a/2-1 let i=z-w dim k(g) for h=2 to g step 2 let k(h)=0 next h rem *素数発生ルーチン 変数 Jが素数 10 for j=2 to g for b=2 to sqr(j) if mod(j,b)=0 then 100 next b gosub 1000 100 next j rem 調査区間の偶数がゴールドバッハの予想通りか検査 であれば表示 PRINT "計算時間は";time-t0;"秒かかりました。" for c=a to g if k(c)=1 then print "チェック済み";c else goto 150 let f=f+1 150 next c if f=i then print a;"以上";g;"以下の偶数は全てチェックされました。" else goto 3000 goto 10000 rem *素数発生サブルーチン 変数 Xが素数 1000 for x=2 to g if x<a-j then 1010 for y=2 to sqr(x) if mod(x,y)=0 then 1010 next y let s=j+x!JとXは必ず素数 if s>g then 2000 if mod(s,2)=0 then print j;"+";x;"=";s else goto 1010 let n=n+1 print "↑No.";n rem *Sが偶数ならばそれは2つの素数の和↑ゴールドバッハの予想を満たす* let k(s)=1!Sは2つの素数による合成数であるので記録 1010 next x 2000 return 3000 print "調査範囲の偶数に欠落発生。再度 要調査" 10000 END |
└2つ目 イタつぼ 2005/03/31 20:03:21 ツリーへ
Re: 「ゴールドバッハの予想」検証 |
返事を書く |
イタつぼ 2005/03/31 20:03:21 | |
2つ目 rem *ゴールドバッハの予想 途中経過非出力バージョン改良版 1 print "「ゴールドバッハの予想」検証プログラム" 3 print "調査区間の偶数(4以上)を2つ入力して下さい。" input a,g if mod(a,2)=1 then 3 if mod(g,2)=1 then 3 if a<4 then 3 if a>g then 3 LET t0=time let z=g/2 let w=a/2-1 let i=z-w dim k(g) for h=2 to g step 2 let k(h)=0 next h rem *素数発生ルーチン 変数 Jが素数 10 for j=2 to g for b=2 to sqr(j) if mod(j,b)=0 then 100 next b gosub 1000 100 next j rem 調査区間の偶数がゴールドバッハの予想通りか検査 であれば表示 PRINT "計算時間は";time-t0;"秒かかりました。" for c=a to g if k(c)=1 then print "チェック済み";c else goto 150 let f=f+1 150 next c if f=i then print a;"以上";g;"以下の偶数は全てチェックされました。" else goto 3000 goto 10000 rem *素数発生サブルーチン 変数 Xが素数 1000 for x=2 to g if x<a-j then 1010 for y=2 to sqr(x) if mod(x,y)=0 then 1010 next y let s=j+x!JとXは必ず素数 if s>g then 2000 if mod(s,2)=0 then let k(s)=1 1010 next x 2000 return 3000 print "調査範囲の偶数に欠落発生。再度 要調査" 10000 END 他にこのプログラムより処理速度の速いプログラムをご存知の方 お教え下されば幸いです。 では失礼します。 |
└こんにちわ。 イタつぼ 2005/04/23 19:43:49 ツリーへ
Re: 2つ目 |
返事を書く |
イタつぼ 2005/04/23 19:43:49 | |
こんにちわ。 10=3+7と 10=7+3は同じものなので 10=7+3の方を排除します。 10行目の下に if j>z then 120と書いて PRINT "計算時間は";time-t0;"秒かかりました。" のトップに 120 の番号を付けて 1000 for x=2 to g の文を 1000 for x=j to g に書き換えてください。 処理速度がはやくなると思います。 |
└納得できるプログラム イタつぼ 2005/05/09 00:22:37 ツリーへ
Re: こんにちわ。 |
返事を書く |
イタつぼ 2005/05/09 00:22:37 | |
納得できるプログラム がやっと書けました。 GOSUB,RETURN文を排除しました。 rem *ゴールドバッハの予想 延々と調査版 2005/5/9 rem 途中の計算を表示する場合は130行のremを消してください。 1 print "「ゴールドバッハの予想」検証用プログラム" print "「ゴールドバッハの予想」を満たす式が" print "一つでもあるかどうか計算します。" 3 print "どの偶数(4以上)から調査しますか?" input g if mod(g,2)=1 then 3 if g<4 then 3 4 print "どの偶数まで調査しますか?" input f if mod(f,2)=1 then 4 if f<g then 4 LET t0=time let n=0 let a=g 5 let c=g-a let d=c/2 rem *素数発生ループ 変数 jが素数 rem ある数が素数かどうか、その数の平方根までの整数で割ってみる。 rem 割りきれたら素数ではない。そうでなければその数は素数。 10 for j=2 to g for b=2 to sqr(j) if mod(j,b)=0 then 100 70 next b rem *素数発生ループ 変数 xが素数 80 for x=g-j to g for y=2 to sqr(x) if mod(x,y)=0 then 90 next y let s=j+x!jとxは必ず素数 if s>g then 100!この文重要 if mod(s,2)=0 then 130 90 next x 100 next j 130 rem print s;"=";j;"+";x let n=n+1 let g=g+2 if g=f+2 then 16000 15000 goto 5 16000 PRINT "計算時間は";time-t0;"秒かかりました。" 17000 print "調査中だった偶数=";g 17010 print "チェックされた偶数の数=";n 17020 print a;"以上";f;"以下までの偶数の数=";d+1 beep 20000 end 最後に"チェックされた偶数の数="と"○×以上×○以下までの偶数の数="というのが出力されますが、この二つの数字が一致すれば、調査範囲の偶数は全て"予想"通りだったという事になります。 |
└http://www.geocities.jp/ixtutou144/goldb... イタつぼ 2005/09/02 15:16:04 ツリーへ
Re: 納得できるプログラム |
返事を書く |
イタつぼ 2005/09/02 15:16:04 | |
http://www.geocities.jp/ixtutou144/goldbach2.htm 私が書いたゴールドバッハの予想に関するプログラム を載せてます。 興味がある方はどうぞ。 |