分解素数时间复杂度最优解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);
}
全部评论

相关推荐

头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务