1007 素数对猜想 (20分)
程序员文章站
2024-03-23 21:19:04
...
题目描述
思路
首先用质数筛法找到所有素数。随后遍历[2,n]所有数,如果i是素数 i+2也是素数(两者相差为2,中间i+1不是素数),这样一堆素数就满足题目要求了
#include<stdio.h>
#define MAX 100001
// 质数筛法 一定要记牢固
int prime[MAX]={0}; // 0代表是素数,1代表不是素数
void isPrime(){
prime[0]=prime[1]=1; // 0和1不是素数
for(int i=2; i<MAX; i++)
{
if(!prime[i]) // 如果是素数,那么它的倍数就一定不是素数
for(int j=2*i; j<MAX; j+=i)
prime[j]=1;
}
}
int main(){
isPrime();
int n;
while(scanf("%d",&n)!=EOF){
int ans=0;
for(int i=2; i<n-1; i++)
{
if(!(prime[i]||prime[i+2])&&prime[i+1])
// i和i+2是素数,说明两者相差为2
// 夹在相差为2的素数之间的数不是素数
ans++;
}
printf("%d\n",ans);
}
return 0;
}
上一篇: Linux系统中进程的管理
下一篇: Java异常处理机制