PAT(乙级)1007.素数对猜想(20)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ASJBFJSB/article/details/89034745

PAT 1007.素数对猜想(20)

让我们定义d​n为:dn=pn+1−p​n,其中p​i是第i个素数。显然有d1=1,且对于n>1有dn是偶数。"素数对猜想"认为 “存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<10^5​​ ),请计算不超过N的满足猜想的素数对的个数。

输入格式:
输入在一行给出正整数N。

输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

题目分析:素数筛选法,O(n^2)求解素数会超时。

AC代码:

#include<cstdio>
#include<cmath>

const int max_n = 100010;

bool p[max_n];
int prime[max_n];
int num = 0;

int main(){
 	int n;
  	scanf("%d",&n);
  	for(int i=2;i<=n;++i){
    	if(p[i]==false){
      		prime[num++] = i;
	  	}
      	for(int j=i+i;j<=n;j+=i){
        	p[j] = true;
      	}
    } 
  	int cnt = 0;
  	for(int i=0;i<num-1;++i){
    	if(prime[i+1]-prime[i]==2){
      		cnt++; 
    	}
  	}
  	printf("%d",cnt);
  	return 0;
} 

猜你喜欢

转载自blog.csdn.net/ASJBFJSB/article/details/89034745
今日推荐