[数论]线性筛数法球孪生素数 [codevs 2046]

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<string>
#include<assert.h>
using namespace std;
const int maxn = 10000000;
int prime[maxn],flag[maxn];
int n,cnt=0;
int main()
{
	scanf("%d",&n);
	for(int i=2;i<=n;i++)
	{
		if(!flag[i])prime[cnt++]=i;
		for(int j=0;j<cnt&&prime[j]*i<=n;j++)
		{
			flag[prime[j]*i]=1;
			if(i%prime[j]==0)break;
		}
	}
	int ans=0;
	for(int i=0;i<cnt-1;i++)
	{
		if(prime[i+1]-prime[i]<3)ans++;
	}
	cout<<ans;
	return 0;
}

你可能感兴趣的:(算法,数论)