新しく発言する EXIT インデックスへ
世界一の素数の表示

  世界一の素数の表示 会社員 2006/03/06 22:21:56 
  画面に表示させると遅いので,一旦,ファイ... 白石 和夫 2006/03/07 08:02:21 
   └白石先生、ありがとうございました 会社員 2006/03/22 22:18:44 

  世界一の素数の表示 会社員 2006/03/06 22:21:56  ツリーへ

世界一の素数の表示 返事を書く
会社員 2006/03/06 22:21:56
世界一の素数だけあって
表示するだけの計算に1週間もかかりました。
何か速く表示する方法ありますか?

! 43番目のメルセンヌ素数の計算 2^30402457-1
! 2^30402457-1は、9152052桁の数→500桁区切りで18304桁以上の配列を準備する

OPTION ARITHMETIC RATIONAL

DIM HAKO(20000)
PRINT "メルセンヌ素数表示プログラム"


LET MJ_30402457=30402457

LET JJJ=10^500
LET HAKO(1)=1
LET n=1500
PRINT "n=";n
LET nbki2=2^n ! 2^n処理
PRINT "×2^n=";nbki2
IF nbki2/10^500<1 THEN PRINT "OK"
PRINT nbki2/10^500
PRINT "まずINT(MJ_30402457/n)=";INT(MJ_30402457/n);"回処理します"


FOR L=1 TO INT(MJ_30402457/n)
CALL BY2n(nbki2) !各桁を2^xx倍する
IF L/100=INT(L/100) THEN PRINT DATE$;" ";TIME$,"L=";L;"回目"
NEXT L

PRINT "余りを処理"
CALL BY2n(2^MOD(MJ_30402457,n)) !各桁を2^xx倍する


LET HAKO(1)=HAKO(1)-1

CALL PRT !印刷処理

!----------------サブルーチン-------------------
SUB BY2n(Jbki2)
FOR J=1 TO 20000
LET HAKO(J)=HAKO(J)*Jbki2
NEXT J
CALL KT_UP !桁処理
END SUB

SUB KT_UP !桁上処理
FOR J=1 TO 20000
IF HAKO(J)>=JJJ THEN
! LET HT=1
LET HAKO(J+1)=HAKO(J+1)+INT(HAKO(J)/JJJ)
LET HAKO(J)=HAKO(J)-INT(HAKO(J)/JJJ)*JJJ
END IF
NEXT J
END SUB

SUB PRT ! 印刷ルーチン
FOR I=20000 TO 1 STEP -1
IF HAKO(I)<>0 THEN
LET p$=STR$(HAKO(I))
LET p$=REPEAT$("0",500-LEN(p$))&p$

PRINT SUBSTR$(p$,001,100);" :";(I-1)*5+4
PRINT SUBSTR$(p$,101,200);" :";(I-1)*5+3
PRINT SUBSTR$(p$,201,300);" :";(I-1)*5+2
PRINT SUBSTR$(p$,301,400);" :";(I-1)*5+1
PRINT SUBSTR$(p$,401,500);" :";(I-1)*5+0

END IF
NEXT I
END SUB

END

  画面に表示させると遅いので,一旦,ファイ... 白石 和夫 2006/03/07 08:02:21  ツリーへ

Re: 世界一の素数の表示 返事を書く
白石 和夫 2006/03/07 08:02:21
画面に表示させると遅いので,一旦,ファイルに出力するのがよいかも知れません。
http://hp.vector.co.jp/authors/VA008683/QA8.htm

   └白石先生、ありがとうございました 会社員 2006/03/22 22:18:44  ツリーへ

Re: 画面に表示させると遅いので,一旦,ファイ... 返事を書く
会社員 2006/03/22 22:18:44
白石先生、ありがとうございました
計算時間の方が圧倒的に時間がかかっていますので
とりあえず2進モードで動かすことにしました。


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