• 查找素数


    素数

    除了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;
    }
  • 相关阅读:
    淘宝技术
    GridView使用
    仿QQ底部切换(Fragment + Radio)
    ViewPage+Fragment(仿微信切换带通知)
    PopupWindow --- 弹出底部窗体
    Activity--弹出底部窗口
    eclipse code style
    抽象类和接口
    java.lang.IllegalStateException: Not connected to server
    android真机 adb调试sqlite数据库
  • 原文地址:https://www.cnblogs.com/ak918xp/p/13530338.html
Copyright © 2020-2023  润新知