#include<iostream>
#include <math.h>
using namespace std;
static bool inline IsPrime(int num){
bool ret=false;
if(num<=1){
return ret;
}
if(num<=3){
ret=true;
return ret;
}
if(num%2==0){
return false;
}
int limit=sqrt(num);
ret=true;
for(int i=2;i<=limit;i++){
if(0==num%i){
ret=false;
break;
}
}
return ret;
}
int main(){
int num;//2000000014
std::cin>>num;
for(int i=2;i<=num;i++){
while(num%i==0){
num=num/i;
if(num==1){
std::cout<<i<<std::endl;
}else{
std::cout<<i<<" ";
}
}
if(IsPrime(num)){
std::cout<<num<<std::endl;
break;
}
if(num==1){
break;
}
}
return 0;
}
主函数中增加一个判断除数是否为质数的判断,从而可以提前退出for循环。比如测试实例2000000014=2x1000000007。1000000007为质数,提前退出for循环,不再从3到1000000007的范围内寻找了。
if(IsPrime(num)){
std::cout<<num<<std::endl;
break;
}