这个题一开始会超时,因为出现了一个很大的次数,在进行质因子判断时循环了太多次。
后面看了大家的思路,发现可以优化,即在剩下那个数是质数时,直接输出该数,这样能大大简化计算更快得出答案
#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; }