HJ6 质数因子(不超时版)

#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;
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目 描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2...
    202xxx阅读 258评论 0 0
  • 题目 描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 ...
    松哥888阅读 87评论 0 1
  • https://blog.nowcoder.net/n/038590a04751480789589773f54a0...
    何几时阅读 284评论 0 0
  • 写这篇文章,主要是因为面试的时候碰到该问题,当时没有反应上来,错过一个机会,后来思考很久,算是找到一个合理的解决方...
    wendy_le阅读 3,658评论 1 1
  • 题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3...
    becoolguy阅读 548评论 0 0