質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

解決済

1回答

1528閲覧

Fortran 素因数分解

BKS

総合スコア8

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2020/04/13 09:31

Fortranで素因数分解を実行したいのですが、最後まで分解できずに困っています。
たとえば
8 → 2, 2, 2
と出力したいのですが、実際には
8 → 2, 4
になってしまいます…!

問題のコードは以下の通りです。

Fortran

1program Prime_factorization 2 3 implicit none 4 5 integer n, m, i 6 integer remainder 7 8 9 do 10 11 write(*, *) ' 好きな数字を入力してください (if n <= 1 STOP) ' 12 read(*, *) n 13 if (n <= 1 ) stop ' Please input the number that is bigger than 1 ! ' 14 if (n > 10000) stop ' Is it bigger than 10,000 ! ' 15 16 m = n 17 18 do i = 2, int(sqrt(dble(n))) 19 20 21 if (mod(m, i) == 0) then 22 write(*, *) i 23 m = m / i 24 cycle 25 else 26 m = m 27 write(*, *) 'a' 28 endif 29 30 enddo 31 32 write (*, *) m 33 34 enddo 35 36end program Prime_factorization

出力が以下の通りになります。

output

1 好きな数字を入力してください (if n <= 1 STOP) 28 3 2 4 4 5

何卒ご教示よろしくお願いいたします…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

割り切れた場合に、cycleで次のiの値になってしまうのが原因でしょう。
同じiの値のままで、割り切れるかチェックするというように、ループを二重にする必要があります。

投稿2020/04/13 09:56

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BKS

2020/04/13 13:32

なるほど…気付きませんでした! 以下のように改善しましたところ、問題なく出力することができました! --------------------------------------------------------------------------------------------------- program Prime_factorization implicit none integer n, i, j integer remainder do write(*, *) ' 好きな数字を入力してください (if n <= 1 STOP) ' read(*, *) n if (n <= 1 ) stop ' Please input the number that is bigger than 1 ! ' if (n > 10000) stop ' Is it bigger than 10,000 ! ' i = 2 do if (i <= int(sqrt(dble(n))) ) then if (mod(n, i) == 0) then n = n / i write(*, *) i cycle else i = i + 1 cycle endif else exit endif enddo write(*, *) n enddo end program Prime_factorization --------------------------------------------------------------------------------------------------- ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問