1007. 素数对猜想 (20)

来源:互联网 发布:闹钟备忘录软件 编辑:程序博客网 时间:2024/05/29 18:01

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:
20
输出样例:

4

#include <stdio.h>#define MAX 100000int count;int map[MAX+1];int isprime(int n) {  int div = 3;  int t = n;  if(n%2==0) return 0;  while(t>div) {    if(n%div==0) return 0;    t = n/div;    div += 2;  }    return 1;}int main() {  int N;  int i,j;  scanf("%d",&N);  j=0;  for(i=1;i<=N;i++) {    if(isprime(i)) {      map[j++]=i;    }  }  for(i=1;i<j;i++) {    if(map[i+1]-map[i]==2)      count++;  }  printf("%d\n",count);  return 0;}

解题思路:类似于占位的方法,求出1到N之间所有的素数并在map数组存储这个素数,最后for循环遍历map数组,如果两个素数差值为2则满足条件,全局变量count加1,最后输出count即可

原创粉丝点击