新しく発言する EXIT インデックスへ
「ゴールドバッハの予想」検証

  「ゴールドバッハの予想」検証 イタつぼ 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
私が書いたゴールドバッハの予想に関するプログラム
を載せてます。
興味がある方はどうぞ。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。