题解 | #质数因子#
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
#include <math.h>
#include <stdio.h>
int main() {
int i = 0;
int num;
scanf("%d", &num);
// if ((num < 1) || (num > (2*10E9 + 14))) {
// return 1;
// }
for (i = 2;; i++) {
// 1 既不是质数,也不是合数
if (num == 1) {
printf("\n");
break;
}
// 每次进入新的循环时,都是要获取 num 的最小质因数
// 此时的 num 必然不可能被小于 i 的值整除
// 因此最小质因数必然大于等于 i
if (i > sqrt(num)) {
// 对于合数,最小质因数必然小于本身的算数平方根,因此进入此条件必然不可能是合数
// 对于质数,最小质因数就是它本身
printf("%d\n", num);
break;
}
while (num % i == 0) {
printf("%d ", i);
num = num/i;
}
}
return 0;
}