欧拉50题-----第7题

在这里插入图片描述
素数求解:
1.暴力

#include"iostream"
using namespace std;
bool isprime(int x){
    for(int i=2;i*i<=x;i++){
        if(x%i==0)return false;
    }
    return true;
}
int main(){
    int cnt=0,i=1;
    while(cnt<10001){
        i++;
        if(isprime(i))cnt++;
    }
    cout<<i<<endl;

return 0;
}

2素数筛

#include"iostream"
using namespace std;
#define MAX_N 200000
int prime[MAX_N+5]={0};
int main(){
    for(int i=2;i*i<=MAX_N;i++){
        if(prime[i])continue;
        for(int j=2*i;j<=MAX_N;j+=i){
            prime[j]=1;
        }
    }
    for(int i=2;i<=MAX_N;i++){
        if(prime[i])continue;
        prime[++prime[0]]=i;
    }
    cout<<prime[10001]<<endl;
return 0;
}

3线性筛
N=P*M
n为最小素数

#include"iostream"
using namespace std;
#define MAX_N 200000
int is_prime[MAX_N+5];
int prime[MAX_N+5];
int main(){
    for(int M=2;M<MAX_N;M++){
        if(is_prime[M]==0){
            prime[++prime[0]]=M;
        }
        for(int j=1;j<=prime[0];j++){
            if(prime[j]*M>MAX_N)break;
            is_prime[prime[j]*M]=1;
            if(M%prime[j]==0)break;
        }
    }
    cout<<prime[10001]<<endl;
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43667631/article/details/92652913