分解素数时间复杂度最优解cpp
质数因子
http://www.nowcoder.com/questionTerminal/196534628ca6490ebce2e336b47b3607
话不多说,直接上代码
#include<bits/stdc++.h>
using namespace std;
bool isPrime( long num )
{
//两个较小数另外处理
if(num ==2|| num==3 )
return true ;
//不在6的倍数两侧的一定不是质数
if(num %6!= 1&&num %6!= 5)
return false ;
int tmp =sqrt( num);
//在6的倍数两侧的也可能不是质数
for(int i= 5;i <=tmp; i+=6 )
if(num %i== 0||num %(i+ 2)==0 )
return false;
//排除所有,剩余的是质数
return true ;
}
int printnums(long a){
if(isPrime(a)){
cout<<a<<' ';
return 0;
}else {
long i=2;
for(;i<=sqrt(a);i++){
if(a%i==0){
cout<<i<<' ';
break;
}
}
long b=a/i;
printnums(b);
return 0;
}
}
int main(){
long a;
cin>>a;
printnums(a);
}
查看8道真题和解析
