zoukankan      html  css  js  c++  java
  • 查找素数

    素数

    除了1和本身之外,不能被其他数整除的一类数

    1.对给定的正整数n,对任意的正整数a(1<a<n)都有n%a!=0成立

    2.一既不是素数也不是合数

    3.n2n-1中每一个数相除来测试是否能否整除,但是O(n)复杂度有点大,为了优化,可以通过平方来减少次数

    #include<iostream>
    #include<math.h> 
    using namespace std;
    int prime[10000];
    int pNum=0;
    bool p[10000]={0};
    bool isPrime(int n){//判断n是否为素数 
        if(n<=1){
            return false;
        }
        for(int i=2;i*i<=n;i++){
            if(n%i==0){
                return false;
            }
        }
        return true;
    }
    
    void Find_Prime(int n){//求素数表
        for(int i=1;i<=n;i++){
            if(isPrime(i)==true){
                prime[pNum++]=i;
                p[i]=true;
            }
        } 
    }
    
    int main(){
        int n;
        while(cin>>n){
            Find_Prime(n);
            for(int i=0;i<pNum;i++){
                cout<<prime[i]<<" ";
            }
            if(pNum==0){//如果没有素数则输出-1 
                cout<<"-1";
            }
            cout<<endl;
        }
        return 0;
    }

     法二:

    素数筛法

    对数组从小到大开始,从第一位数开始,将这个数的倍数全部设为合数,然后找到下一位没有被设为何叔的数组下标,从这位数字继续将这个数的倍数全部设为合数,直到最后一个数字。O(nloglogn)

    #include<iostream>
    using namespace std;
    int prime[10000];
    int pNum=0;
    bool p[10000]={0};
    
    void Find_Prime(int n){//求素数表
        for(int i=2;i<=n;i++){
            if(p[i]==false){
                prime[pNum++]=i;
                for(int j=i+i;j<=n;j=j+i){//每次增加i,对i的倍数进行检查 
                    p[j]=true;
                }
            }
        } 
    }
    
    int main(){
        int n;
        while(cin>>n){
            Find_Prime(n);
            for(int i=0;i<pNum;i++){
                cout<<prime[i]<<" ";
            }
            if(pNum==0){//如果没有素数则输出-1 
                cout<<"-1";
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    zeplin使用教程
    如何卸载命令行全局安装的包
    webstrom快捷键
    更新npm至最新版本
    mac环境下安装react项目环境
    横向滚动条布局
    JAVA语法基础——动手动脑
    JAVA语言课堂测试
    暑假第八周进度报告
    暑假第七周进度报告
  • 原文地址:https://www.cnblogs.com/ak918xp/p/13530338.html
Copyright © 2011-2022 走看看