题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举),最后一个数后面也要有空格。
输入描述
输入一个 long 型正整数。
输出描述
按照从小到大的顺序输出它的所有质因子的字符串,以空格隔开。
示例
输入:
text
180
输出:
text
2 2 3 3 5
说明: 180 = 2 × 2 × 3 × 3 × 5
C 语言解决方案
思路
从小到大枚举因子 i(从 2 开始):
-
只要
n能被i整除,就输出i,并令n /= i,重复直到不能整除。 -
枚举到
i * i > n时停止。若此时n > 1,说明n本身是一个质因子,直接输出。
关键优化: 循环条件用 i * i <= n,可将复杂度从 O(n) 降到 O(√n)。
代码实现
c
#include <stdio.h>
int main(void) {
long n;
scanf("%ld", &n);
// 枚举因子,i * i <= n 是核心优化
for (long i = 2; i * i <= n; i++) {
while (n % i == 0) {
printf("%ld ", i);
n /= i;
}
}
// 若剩余部分 > 1,则它本身是质因子
if (n > 1) {
printf("%ld ", n);
}
printf("\n");
return 0;
}