第二种会错一个点不知道为啥
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
bool isPrime(int n)
{
if(n<=1) return true;
for(int i = 2;i<=sqrt(n);i++)
{
if(n%i==0)
return true;
}
return false;
}
const int N = 100010;
bool p1[N]={0};
bool p2[N]={0};
int pn1=0;
int num1[N];
int pn2=0;
int num2[N];
void Find_Prime1(int n){
//isprime o(nlogn)第一种
for(int i = 2;i<=n;i++)
{
if(isPrime(i)==false)
{
num1[pn1++]=i;
}
}
}
void Find_Prime2(int n)
{
//第二种 O(Nlonglongn)
for(int i = 2;i<n;i++)
{
if(p2[i]==false)
{
num2[pn2++]=i;
for(int j=i+i;j<n;j+=i)
{
p2[j]=true;
}
}
}
}
int main()
{
int n,countn=0;
scanf("%d",&n);
Find_Prime1(n);
Find_Prime2(n);
// for(int i = 0;i<pn1;i++)
// {
// printf("%d ",num1[i]);
// }
// printf("\n");
// for(int i = 0;i<pn2;i++)
// {
// printf("%d ",num2[i]);
// }
for(int i = 0;i<pn1-1;i++)
{
if((num1[i+1] - num1[i]) == 2)
{
countn++;
}
}
printf("%d",countn);
// for(int i = 0;i<pn2-1;i++)
// {
// if((num2[i+1] - num2[i]) == 2)
// {
// countn++;
// }
// }
// printf("%d",countn);
}