
5000万までの素数を求めるプログラムなのですが、私の作ったプログラムは実行時間26秒くらいかかります。
先生が言うには10秒台が出るとのことですが、私は頑張っても時間を短くすることができません。
下に私の作ったプログラムを載せますので短くする方法を教えて下さい。
integer table(2:50000000),pno(50000000),cnt,m,i,j
m=sqrt(50000000.)
do 10 i=2,m
do 10 j=i*2,50000000,i
table(j)=1
10continue
do 20 i=2,50000000
if(table(i).eq.0)then
cnt=cnt+1
end if
20continue
write(6,610)cnt
610format('sosu no goukei =',i8)
end
No.1ベストアンサー
- 回答日時:
ちょっといじってみました。
integer table(2:50000000) / 499999999*0 /
integer cnt / 49999999 /
integer m
integer i, j
m=int(sqrt(50000000.))+1
do 20 i=2,m
if(i .gt. 2 .and. mod(i,2) .eq. 0 ) go to 20
if(i .gt. 3 .and. mod(i,3) .eq. 0 ) go to 20
if(i .gt. 5 .and. mod(i,5) .eq. 0 ) go to 20
if(i .gt. 7 .and. mod(i,5) .eq. 0 ) go to 20
do 10 j=i*2,50000000,i
if(table(j) .eq. 0) then
table(j)=1
cnt=cnt-1
endif
10 continue
20 continue
m=2を判定すれば偶数はすべてチェック完了でしょ。4や6のループは不要で、これだけで計算量は半減です。ついでに3や5、7位まではやっておきましょう。
then~endif構文を使うと煩雑なのでgotoにしてあります。
と思っていたら、もっとスマートなのが
do 20 i=2,m
(table(i) .eq. 0) then
do 10 j=i*2,50000000,i
if(table(j) .eq. 0) then
table(j)=1
cnt=cnt-1
endif
10 continue
endif
20 continue
こちらはどうしてうまくいくか考えてみてね
あと、まず変数はdata文や宣言文で初期化しましょう。
FORTRANの言語仕様では宣言だけした変数の値は不定で、処理系に依存します。実際は0クリアされていることが多いですが、こういうのに頼ってはいけません。
4や6のループは不要というのでわかりました。
私はk=i-(i/2)*2を使って、2以外の偶数を省くというやり方でやりました。
そしたら13秒とかなり早くなりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 日付の計算方法 2 2022/07/01 23:35
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) vbaで色付けされたセルを除外したいのですが 5 2023/01/28 17:22
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フローチャートの菱形が狭い。。。
-
TeXでフローチャート
-
C言語関連です その2
-
あるプログラムのコマンドライ...
-
VBAで仕様書は書きますか?
-
正しい五十音順について
-
VBAにてメール作成した際、一部...
-
65536は2の何乗なのでしょうか?
-
EXCELなどで「返す」という表現
-
Excelで4096点以上のFFTの方法
-
Vba UserFormを前面に出す方法...
-
バッチファイルでUSB挿入時に実行
-
ABAQUS ユーザーサブルーチン...
-
VBAで関数をつくる
-
PICマイコンのコピー(クローン...
-
C++ で、「)」が必要 というエ...
-
内税の計算式
-
排他的論理和 BCC(水平パリテ...
-
Eclipseの環境設定について
-
Sublime Text 3でのFortranプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フローチャートの菱形が狭い。。。
-
フローチャートで 変数に代入す...
-
学校でフローチャートって教わ...
-
TeXでフローチャート
-
Fortranの倍精度実数について
-
フローチャートが書けません
-
フローチャートのループ
-
fortran 3次元座標
-
Delphiで配列をファイルに出力...
-
フローチャートで。
-
カシオ fx-4800pにて
-
フローチャートの演算記号
-
fortran errorについて
-
フローチャート以外の設計方法
-
【fortran】フーリエ級数について
-
正しい五十音順について
-
あるプログラムのコマンドライ...
-
VBAで仕様書は書きますか?
-
65536は2の何乗なのでしょうか?
-
Excelで4096点以上のFFTの方法
おすすめ情報