您的位置:首页 > 其它

PAT (Basic Level) Practice (中文):1007 素数对猜想(20分)

2019-01-26 16:26 246 查看

1007 素数对猜想 (20 分)

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

现给定任意正整数

N
(<10​5​​),请计算不超过
N
的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数

N

输出格式:

在一行中输出不超过

N
的满足猜想的素数对的个数。

输入样例:

[code]20

输出样例:

[code]4

作者: CHEN, Yue

单位: 浙江大学

时间限制: 200 ms

内存限制: 64 MB

代码长度限制: 16 KB

解析:刚开始使用的是双层循坏,但是提交之后显示超时,只得到了一半的分数,这说明我的算法有问题,于是改进了解题思路。正确代码如下。

#include<bits/stdc++.h>
using namespace std;
int prim(int n){  //判断n是否为素数的函数,若是素数返回1,否则返回0.该函数也可以写成bool类型,那样返回值为true或false
    int i;
    if(n<1) return 0;
    if(n==2) return 1;
    for(i=2;i<=sqrt(n);i++){
        if(n%i==0) return 0;
    }
    return 1;
}
int main(){
  int i,n,num=0;  //n为输入的那个正整数,num用来计数
    cin>>n;
    for(i=4;i<=n;i++){
            if(prim(i)&&prim(i-2)) //若数值i和i-2都是素数则满足条件,num加一
            num++;
    }
    cout<<num<<endl;
    return 0;
}
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: