- ベストアンサー
素因数分解プログラムで5は5と表示される理由は?
- 素因数分解プログラムで5は5と表示される理由について、解説します。
- プログラムの説明として、2以上の数値を入力し、素因数分解した結果を表示するコードを使用しています。
- プログラムの実行結果として、入力した数値が5の場合は5と表示されます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 3) for( x = 2 ;・・・とあり、 > 5)printf( "%d ", x );のxは2なので > → printfは2しか表示しないのでは、と思うのですが、 > 実際は 違います!どうしてでしょうか? ANo.2において次のように回答済み↓ 最初のforループでは,x=2, 4) 5%2≠0 なので 5) 6) は実行しない。
その他の回答 (4)
- jjon-com
- ベストアンサー率61% (1599/2592)
「n /= x」は「n = n / x」と同じ意味です。下記ページの解説を参照。 http://9cguide.appspot.com/05-01.html#S6 for文や代入演算子など C言語の基本的な文法の理解が不十分なようでしたら,次のまとまった解説を最初から通し読みした方が,十分ボリュームがあるようでも理解は早いように思います。急がば回れ,ということですね。 http://9cguide.appspot.com/
補足
ご回答誠にありがとうございました。 A;「n /= x」は「n = n / x」と同じ意味 了解しました。 ご紹介のURL全て読みました。すごくわかり安解説です。 私ごとですが、応用面が弱いので弱いところは頑張るしかないです・・ jjon-com様の御解説を再度解析中ですが、 新たな疑問が生まれました。 何だそんな質問するな!と思われる方ともいると思いますが! 3) for( x = 2 ;・・・とあり、5)printf( "%d ", x );のxは2なので→ printfは2しか表示しないのでは、と思うのですが、実際は 違います!どうしてでしょうか?宜しければ御解説をお願い致します。
- asuncion
- ベストアンサー率33% (2127/6290)
コンピューターになったつもりで、1行ずつ実行してみればよいと思います。
- jjon-com
- ベストアンサー率61% (1599/2592)
> 3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。*/ 初期値…変数xの値を2から開始して 増分…ループを終えるたびにxの値を1つずつ加算して, 継続条件…変数nの値が1より大きい場合にループし続ける (言い換えれば,nが1以下になったらループを終える) > 4) while( ( n % x ) == 0 ){ nをxで割った余り=0 が成り立つ間,5) 6) をループし続ける。 言い換えれば,nをxで割った余り≠0 ならループを終える。 >どこのプログラムで5は5しか割り切れないと判断しているのでしょうか? 最初のforループでは,x=2, 4) 5%2≠0 なので 5) 6) は実行しない。 次のforループでは,x=3, 4) 5%3≠0 なので 5) 6) は実行しない。 次のforループでは,x=4, 4) 5%4≠0 なので 5) 6) は実行しない。 次のforループでは,x=5, 4) 5%5≠0 なので 5) で「5」を表示して, 6) で「n←5÷5の商」すなわち「n←1」 次のforループの開始時点で n>1 が成り立たなくなるので, forループを終了して,プログラム終了。
補足
ご回答ありがとございました。 > 3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。*/ は以前質問した履歴が残っていまして、失礼しました。 現在ご回答を現在解析中ですが、 「 6) n /= x; 」はどんな意味でしょうか 私が持っている教本には似たような式がございます。 教本には「a = b / c 」はとあり、「bをcで割った値をaに代入」とわありますが 違うみたいです。 すみません又、宜しくお願いします。
- kmee
- ベストアンサー率55% (1857/3366)
> 100と入力すると→2 2 5 5 の方は理解できてますか? > 5と入力すると→5 なのは、素因数分解した結果がたまたま5だけだった、というだけです。 「5は5しか割り切れない」というような特別な判定はしていません。
お礼
皆様御回答ありがとうございました^^特にjjon-com様、私のような素人の疑問に御丁寧に詳く御回答いただき誠にありがとうございます。 私も質問することで、一つ理解すと、又新たな疑問が湧いてきます。 簡単なプログラムだと文字では感じ取れるのですが、裏方では複雑 な取り決めがあるのですね。 また、プログラムは連鎖的だと最近思うようになりました。 完ぺきではないのですが!ここで一度閉めて、再度質問したいと思います。 皆様今後とも 宜しくお願い致します。
補足
「printfは2しか表示しないのでは、と思うのですが」 私の勘違いでした。3)のX++~Xは2以上の数字へと変化します^^