题解 | #质数因子#
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
#include <stdio.h>
int main() {
//思路:情况1,本身就是质数,输出自身即可;
//情况2,都是质因子,按序输出所有因子即可;
//情况3,有质因子也有合数因子,合数因子可以再拆分为质因子;
//处理办法1:获取数据范围内的所有质数构建质数表,然后根据质数表逐层进行
//除法筛查;处理方法2:判断当前数据是否为质数,如果不是质数则按照一定
//方式进行逐层筛查
long num;//存储输入的数字
int count=0;//用来进行格式控制,确保其输出满足数字空格的格式
scanf("%d",&num);
for(int i=2;i<=num;i++){
if(i*i>num){//此处的代码是为了保证不超时而做的改进
i=num;
}
//由于之前测试的时候在2000000014用例处出现超时,是因为2000000014=2*1000000007,逐个遍历的话
//需要循环次数太多,而该判断的好处在于,如果说i已经遍历到sqrt(num)的层次,那么说明此时的num必然
//是一个素数,则省略后续线性遍历的过程直接将i的值变成num即可
//另外,还可以尝试做的一个小改进是,除了2之外没有偶数的素因子,所以可以把2单独判断,后续的步长取i=i+2
//以减少循环总次数
while(num%i==0){
if(count==0){
printf("%d",i);
count++;
}
else{
printf(" %d",i);
}
num = num/i;
}
}
printf("\n");
return 0;
}

