埃及筛和质数筛
关于质数埃及筛和线性筛
介绍一下埃及筛
#include<bits/stdc++.h>
#define maxn 1000010
#define ll long long
using namespace std;
int prime[maxn];
bool is_prime[maxn];
int sieve(int n)
{
memset(is_prime,true,sizeof(is_prime));
int p=0;
is_prime[0]=is_prime[1]=false;
for(int i=2;i<=n;i++)
{
if(is_prime[i])
{
prime[p++]=i;
for(int j=2*i;j<=n;j+=i)
is_prime[j]=false;
}
}
return p;
}
int main()
{
int n;
cin>>n;
cout<<sieve(n)<<endl;
}
素数线性筛
#include<bits/stdc++.h>
#define maxn 1000010
#define ll long long
using namespace std;
int prime[maxn];
int factor[maxn];
int sieve(int n)
{
int p=0;
for(int i=2;i<=n;i++)
{
if(!factor[i])
{
prime[p++]=i;
factor[i]=i;
}
for(int j=0;j<p&&prime[j]*i<=n;j++)
{
factor[prime[j]*i]=prime[j];
if(!(i%prime[j]))
break;
}
}
return p;
}
int main()
{
int n;
cin>>n;
cout<<sieve(n)<<endl;
}
输入一个整数,取小于它的质数在质数表中的位数
或
bool isprime(int n)
{
if(n<=1) return false;
if(n==2||n==3) return true;
if(n%6!=1&&n%6!=5) return false;
for(int i=5;i*i<=n;i+=6) if(n%i==0||n%(i+2)==0) return false;
return true;
}
在主函数中调用时写if(isprime(x))即可判断出

浙公网安备 33010602011771号