这里采取了牺牲空间、降低时间复杂度的筛选法。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100005
/*
Created by HarvestWu on 2018/4/28.
*/
int isPrime[MAX] = { 0 }; //下标的值是否_素数(用于判断给定数n是不是素数)
int prime[MAX];//按顺序存储素数(用于求第*个素数)
//筛选法求素数
void getPrime(){
int count = 0;
for (int i = 2; i < MAX; i++){
if (!isPrime[i]) {
prime[count++] = i;
for (int j = 2; i * j < MAX; j++)
isPrime[i * j] = 1;//素数为0,合数为1
}
}
}
int main()
{
getPrime();
int n, count = 0;
scanf("%d", &n);
int i = 0;
while (prime[i]<=n)i++;
for (i; i > 1; i--)
if (prime[i-1]-prime[i-2]==2)//i-1是第i个素数的下标(从0开始存的)
count++;
printf("%d", count);
return 0;
}