问题标题: 酷町堂:5582 90分用的4471满分代码

0
0
已解决
高子健
高子健
新手天翼
新手天翼

#include<bits/stdc++.h>

using namespace std;

int n,cnt;

bool cmp(int n){

    if(n==1)

    return false;

    for(int i=2;i<=sqrt(n);i++){

        if(n%i==0)

        return false;

    }

    return true;

}

int main(){

    cin>>n;

if(n==1){

cout<<"0";

return 0;

}

    for(int i=1;i<=n;i++){

        int j=i+2;

        if(cmp(i)&&cmp(j))

        cnt++;

    }

    cout<<cnt;

return 0;

}

什么情况

long long没用试过了

加了特判

没超时


0
已采纳
黄依成
黄依成
中级天翼
中级天翼

4471数据水了

如果有一个数据点是11,就过不去了

因为11和13都是质数,但超过11了

最大只能到9和11

所以循环是从1到n-2

0
江子周
江子周
中级守护
中级守护

题目要求找出不超过n的素数对的个数,所以循环应该是1~(n-2),这样就对了

PS:0的话不用加特判,1也是(而且,埃氏筛法更快一些)

0
周明轩
周明轩
资深光能
资深光能

可能i+2已经超过n了

所以得把:

for(int i=1;i<=n;i++){

        int j=i+2;

        if(cmp(i)&&cmp(j))

        cnt++;

    }

改成:

for(int i=1;i<=n;i++){

        int j=i+2;


        if(cmp(i)&&cmp(j)&&j<=n)

        cnt++;

    }

就AC了:

望采纳

0
我要回答