埃及筛和质数筛

关于质数埃及筛和线性筛


介绍一下埃及筛

#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))即可判断出

posted @ 2020-10-18 23:02  瓜子NEW-G  阅读(333)  评论(0)    收藏  举报