C++怎么用埃式筛法求解素数
导读:本文共1782.5字符,通常情况下阅读需要6分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:希望大家仔细阅读,能够学有所成!埃式筛法首先要了解什么式埃式筛法之前,需要知道一个定理。就是素数的整数倍一定不是素数。了解了这个就基本大概懂了埃式筛法。首先初始化一个布尔数组is_prime,用于记录每个数是否为素数。从2开始,枚举每个数i,如果is_prime[i]为true,则i是素数,添加到素数数组primes中。然后对于每个i,我们让我扩大j倍,直到ij小于输入的数字n,把is_prime... ...
目录
(为您整理了一些要点),点击可以直达。希望大家仔细阅读,能够学有所成!
埃式筛法
首先要了解什么式埃式筛法之前,需要知道一个定理。
就是素数的整数倍一定不是素数。
了解了这个就基本大概懂了埃式筛法。
首先初始化一个布尔数组is_prime,用于记录每个数是否为素数。
从2开始,枚举每个数i,如果is_prime[i]为true,则i是素数,添加到素数数组primes中。
然后对于每个i,我们让我扩大j倍,直到ij小于输入的数字n,把is_prime[i j]赋值为false。
重复步骤2和3,直到遍历到n为止。
埃式筛法求解某一个数字包含的所有素数数组
Code
#include<iostream>include<vector>
include<ctime>
usingnamespacestd;
vector<int>sieve_of_eratosthenes(intn){
vector<int>primes;
vector<bool>is_prime(n+1,true);
is_prime[0]=is_prime[1]=false;
for(inti=2;i<=n;i++){
if(is_prime[i]){
primes.push_back(i);
}
for(intj=2;ij<=n;j++){
is_prime[ij]=false;
}
}
returnprimes;
}
intmain(){
clock_tstart,end;
start=clock();
intn;
cout<<"PleaseEntern:";
cin>>n;vector<int>primes=sieve_of_eratosthenes(n);cout<<"Primes:";for(intprime:primes){ cout<<prime<<"";}cout<<"\n素数个数为"<<primes.size()<<"个\n";end=clock();cout<<"Theruntimeis:"<<(double)(end-start)/CLOCKS_PER_SEC<<"s"<<endl;return0;
}
运行结果
埃式筛法判断某一个数字是否为素数
Code
#include<iostream>include<vector>
include<ctime>
usingnamespacestd;
//埃式筛法求解素数
boolsieve_of_eratosthenes(intn){
vector<bool>is_prime(n+1,true);
is_prime[0]=is_prime[1]=false;
for(inti=2;i<=n;i++){
if(is_prime[i]&&i==n){
returntrue;
}
for(intj=2;ij<=n;j++){
is_prime[ij]=false;
if(i*j==n){
returnfalse;
}
}
}
}
intmain(){
clock_tstart,end;
start=clock();intn;cout<<"PleaseEntern:";cin>>n;if(sieve_of_eratosthenes(n)){ cout<<n<<"是素数!!!";}else{ cout<<n<<"不是素数...";}end=clock();cout<<"Theruntimeis:"<<(double)(end-start)/CLOCKS_PER_SEC<<"s"<<endl;return0;
}
运行结果
C++怎么用埃式筛法求解素数的详细内容,希望对您有所帮助,信息来源于网络。