HJ6 质数因子(不超时版)

2022-07-13  本文已影响0人  help_youself
#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;
        }
上一篇下一篇

猜你喜欢

热点阅读