质数因子
程序员文章站
2022-07-13 14:27:19
...
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
最后一个数后面也要有空格
思路:
(1) 每一个合数都可以分解为若干个质数的乘积;
(2) i从2开始找,当第一个N % i == 0的时候, i一定为N的最小质因子,假设i为合数,则i肯定能分为更小的质数乘积,又因为i是从2开始的,所以i是最小的质因子, 此时进行N = N / i;
如何保证N / i的最小质因子从i开始, 假设从i之前就有N / i的质数因子,那么这个质数因子肯定也是N的,又因为前面证明了i就是最小的质数因子,所以假设不成立。
(3) N % i != 0的时候,i++直到i = N
代码如下:
#include <stdio.h>
int main(void)
{
long N = 0;
while (scanf("%d", &N) != EOF) {
for(int i = 2; i < N + 1;) {
if (N % i == 0) {
printf("%d ", i);
N = N / i;
} else {
i++;
}
}
printf("\n");
}
return 0;
}