dポイントプレゼントキャンペーン実施中!

練習問題 5-15
 2以上の数値を入力し、素因数分解した結果を表示しなさい。
 
 疑問ですが、素因数分解なので割る数字は、2.3.5.7.・・・の自分の数字しか割りきれない数字で
 割ります。それでは、以下のプログラムはどこでそれを判断しているのでしょか?
 4で割ろうとしないのは、どこのプログラムが司っているのでしょうか
 もし!見えない取り組みがあれば宜しくお願いします。
 以下プログラムです。
1) int n, x;

2) scanf("%d", &n );
3) for( x = 2 ; n > 1 ; x++ ){
4) while( ( n % x ) == 0 ){
5) printf( "%d ", x );
6) n /= x;
}
}

A 回答 (4件)

http://oshiete.goo.ne.jp/qa/6868042.html の私の過去の回答ANo.2

の理解がまだ不十分なようです。
途中過程をメッセージ出力した次のコードを試してみてください。

int n, x;
scanf("%d", &n);
for (x = 2; n > 1; x++) {
while (1) {
printf("%dを%dで割ってみる...\n", n, x);
if (n % x == 0) {
printf("\t割り切れた\n");
n /= x;
} else {
printf("\t割り切れない\n");
break;
}
}
}

この回答への補足

jjon-com様 御回答誠にありがとうございます。
 私のC言語環境は OS:Win7、MinGwとMSYSです。
 コンパイルできるように御紹介のプログラムを
最初と最後を追加して試しました。
 残念ながら文字化けが生じてしまいましたが、化けた部分をエディタに貼り付けたら
 ちゃんと立派な文字があらわれて助かりました。
#include<stdio.h>
int main()
{
int n, x;

scanf("%d", &n);

for (x = 2; n > 1; x++) {
while (1) {
printf("%dを%dで割ってみる...\n", n, x);
if (n % x == 0) {
printf("\t割り切れた\n");
n /= x;
} else {
printf("\t割り切れない\n");
break;
}

}
}
return 0;
}
$ d
100
100を2で割ってみる...
割り切れた
50を2で割ってみる...
割り切れた
25を2で割ってみる...
割り切れない
25を3で割ってみる...
割り切れない
25を4で割ってみる...
割り切れない
25を5で割ってみる...
割り切れた
5を5で割ってみる...
割り切れた
1を5で割ってみる...
割り切れない

以上です^^ 
せっかくですので、横やりの質問ですが、「100」と入力した結果ですが、
文字化けしてしまい、私の変えたプログラムで何か不適切な部分がありますか?
宜しくお願いします。

補足日時:2011/07/21 05:34
    • good
    • 0
この回答へのお礼

 ご回答ありがとうございました。
例題まで作成していただきとてもありがたことです。
 流れ的なプログラムは理解できました。ループ処理されるので、最終的には自分の数字でしか割り切れないところまでプログラムが働く・・・
 まだ私は完璧に理解することはできませんが、プログラムの流れは分かりました。本題で elseを使用したら、とても分かり安と思いましたが、あえて使わないことで処理能力の向上につながり、プログラムを組む上では必要なことだと思います。まだまだ練習問題が山ほどあり、素人の素朴な疑問で、ばかげた質問をすると思いますが
 お許しください。

お礼日時:2011/07/28 04:07

> 私の変えたプログラムで何か不適切な部分がありますか?



いいえ,その実行結果が私の意図していたそのものです。


> 4で割ろうとしないのは、どこのプログラムが司っているのでしょうか

というご質問に対するお二人の回答者からの回答,

> x=4(=2*2)にいくまでに、
> 4で割れる条件が処理されています(2で割る処理を行っています)

> (4で)割ろうとしてるけど、空振りしているだけです。

という事実がその実行結果の中に現れていることがお分かりになりますか?
    • good
    • 0

n=20を考えると(20=5*4)


以下のように動きます
1.3)でX=2
2.4)でn%x は20%2で割り切れる5)以下の処理
3.5)で2を表示
4.6)n=n/x つまり n=20/2=10
5.4)でn%x は10%2で割り切れる5)以下の処理
6.5)で2を表示
7.6)n=n/x つまり n=10/2=5
8.4)でn%x は5%2で割り切れないので3)へいく
9.3)でX=3

このように動きます
つまり4)、6)の処理で入力値nを2であまりが出るまで
割り続けています。
x=4(=2*2)にいくまでに、
4で割れる条件が処理されています(2で割る処理を行っています)
    • good
    • 0

> 4で割ろうとしないのは、どこのプログラムが司っているのでしょうか



割ろうとしてるけど、空振りしているだけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!