scanfで値を得て、その値に約数があるか調べるにはどうしたらいいですか?
解りやすく教えてください。
答え:
#include <stdio.h>
main()
{
int num,loop;
printf("num=");
scanf("%d",&num);
printf("yakusuu=");
for(loop=2;loop<num;loop++)
..if(num == (num/loop)*loop)
..{
....printf("%d ",loop);/*約数を表示*/
..}
}
scanfにて値を入力し、約数を表示するプログラムです。
..はタブの代わりです。
整数型の除算の商は小数点以下切捨てとなりますので、商に除数を掛けて、元の被除数になれば、割り切れた、すなわち除数は約数ということになります。
補足の質問:
ありがとうございました。この質問・回答は役に立ちましたか?
答え:
「約数があるか調べる」=素数判定ですね。
Wikipediaの「素数判定」のページに説明とプログラムがあります。
(参考URLをご覧ください。)
簡単にプログラムを説明すると、まず
2で割り切れるかどうか先に調べることで
残りの計算量を節約しています。
(奇数で割れるかどうかだけテストすれば十分になります。
プログラムの下の部分です)
> if(n%2==0)
ある数で割り切れるかどうか、については
剰余演算子「%」を使っています。
”余りが0なら割り切れる”わけですから。
また、除数の範囲については
3から”テスト対象の平方”までになっています。
> for(i=3;i*i<=n;i+=2)
それより大きい数の範囲では商が除数より小さくなるので
既にテスト済みになるからです。
例を挙げると、29をテストするには
29の平方、つまり5.385までの奇数で割ってみれば十分です。
それ以上の数で割り切れたとしたら商は5.385より小さくなる、
つまりその時点までに割ってみているはずです。
ウェブサイトのユーザーによる情報ポスト、JPQA.comのない保証の正しさ.