masa_beginner
@masa_beginner

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

素因数分解が上手く行われない。

解決したいこと

素因数分解が上手く行われない

素因数分解を行うプログラムを作成したいです。
(例)
60を入力
2 2 3 5が出力される

下記のコードですと2,3,5というように想定とは反する結果が出力されてしまうのですが何故でしょうか?

想定している処理としては
①60を入力
②for文を用いて60が割り切れる数を2-60まで順番に探していく
③if文内で、もし割り切れる数字を見つけたら、printfで出力
④元々の60から30へ数字を更新
⑤また①の処理を行いたいのでi = 2に初期化
①の処理を繰り返す。

どなたかご教示をお願い致します。

該当するソースコード

#include <stdio.h>
int main(void) {
  int n, i;  
  scanf("%d", &n);
  for (i = 2; i <= n; i++) {
    if(n%i == 0){
      printf("%d",i);
      n/=i;
      i = 2;
    }
  }
  return 0;
}
0

1Answer

i = 2のあとに次のループのインクリメントされているので次のループはi = 3になっている説。アルゴリズム的にはi = 2に戻らずとも今の数字を繰り返せばいいだけなのでi--が正解かもです。

0Like

Comments

  1. @masa_beginner

    Questioner

    おっしゃる通り次のループが3になっていたようです。
    i=1 に変更したところうまく行きました。
    ありがとうございますm(_ _)m

Your answer might help someone💌