您的位置:首页 > 其它

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

2017-07-01 16:02 260 查看
题目:链接https://www.patest.cn/contests/pat-b-practise/1007

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

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

方法一:普通方法

#include<iostream>
#include<cmath>
using namespace std;
const int maxn=100002;
bool is_prime(int n){ //素数判断
if(n<=1) return false;
int m=floor(sqrt(n)+0.5);
for(int i=2;i<=m;i++)
if(n%i==0) return false;
return true;
}
int main(){
int n;
while(cin>>n){
int ans=0;
for(int i=3;i<=n;i++){
if(is_prime(i)==true&&is_prime(i-2)==true) ans++;
}
cout<<ans<<endl;
}
return 0;
}


方法二:素数表

#include<stdio.h>
int prime[100000]={0},primecnt=0;
bool num[100000]={false};
void init(){ //预处理素数表
for(int i=2;i<100000;i++){
if(num[i]) continue;
prime[primecnt++]=i;
for(int j=i*i;j<100000;j=j+i) num[j]=true;
}
}
int main(){
int n;
init();
while(scanf("%d",&n)!=EOF){
int cnt=0;
for(int i=0;prime[i+1]<=n;i++){
if(prime[i+1]-prime[i]==2) cnt++;
}
printf("%d\n",cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: