課題 [4] for 文(9/9)

問 9(提出プログラム名:ex0409a.c)
※上級クラスは必須(中級クラスはできる人だけでよい)
(いずれも加点対象)

この問題は while 文または for 文による繰り返し構造と if 文を使った練習問題になっています.
なお,配列を使ってはいけません.ライブラリ関数(平方根を求める関数等)も使ってはいけません.

1 つの整数 n を読み込み,整数 n を(実行例に示すかたちで)素因数分解するプログラムを作りなさい.ただし,提出するファイル名は ex0409a.c とすること.
なお,ここでは n は 2 以上であると仮定してよい.

【ヒント】
k = 2, 3, 4, ... の順に「nk で割りきれる限り,n /= k を繰り返す」という処理を行っていけば素因数分解ができます.
なお,4 は素数ではないですが,その前に 2 で割れるだけ割っているので,その時点でもはや 4 で割り切れることはないため 4 が素因数として出力される心配はありません.

(例)n = 12 の場合:
①最初に k = 2 としておきます.
nk(=2) で割り切れるので n /= k として n = 6 となります(ここで k(=2) が素因数として出現).
③引き続き nk(=2) で割り切れるので n /= k として n = 3 となります(ここも k(=2) が素因数として出現).
④すると,もう nk(=2) で割り切れないので,2 で割り続けるのはここで終了となる.
⑤次に k++ として k = 3 の状態にし,「n3 で割り切れるか」という視点で②へ戻って同様のことを繰り返す(すると 3 が素因数として出現).

  • 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
    末尾の改行(\n)の書き忘れ,途中の * の書き忘れに注意せよ.
n を入力してください:12
12 = 2 * 2 * 3

  • 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
    上の実行例1だけでなく,この実行例2や下の実行例3も必ず確認せよ.
n を入力してください:124740
124740 = 2 * 2 * 3 * 3 * 3 * 3 * 5 * 7 * 11

  • 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
n を入力してください:2
2 = 2

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 上の実行例と出力が違っていることを見落としている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


問 4 ~問 9 は 5/11(月)23:59 までに提出を済ませなさい.
(ex0404a.c ~ ex0409a.c を Moodle から提出してください.)
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.