这个题一开始会超时,因为出现了一个很大的次数,在进行质因子判断时循环了太多次。
后面看了大家的思路,发现可以优化,即在剩下那个数是质数时,直接输出该数,这样能大大简化计算更快得出答案
#include <stdio.h>
long int isprime(int a){
int flag = 1;
if(a == 2 || a == 3){
flag = 1;
}
else{
for(long int i = 2;i<=(int)sqrt(a);i++){
if(a%i == 0){
flag = 0;
break;
}
}
}
return flag;
}
int main(){
long int a;
scanf("%ld",&a);
for(long int i = 2;i<=a;i++){
if(isprime(a)){ //优化点,每次得到的a先进行判断,如果为质数,输出
printf("%ld ",a);
a /= a;
}
if(a%i == 0 && isprime(i)){
printf("%ld ",i);
a /= i;
i = 1;
}
}
return 0;
}



京公网安备 11010502036488号