乙级-素数对猜想

    科技2022-07-10  106

    #include <stdio.h> #include <math.h> int main() { long n,i,j,t=0,prime[50001]={0},count=0,flag[100001]; for(i=0;i<100001;i++) flag[i]=1; scanf("%ld",&n); //判断素数过程!!!!可以简化,不要超时!!!! for(j=3;j<=n;j++) { for(i=2;i<=sqrt(j);i++) { if(j%i==0) { flag[j]=0; break;} } } t=0; flag[0]=0; for(i=0;i<=n;i++) { if(flag[i]==1) {prime[t]=i; t++;} }

    for(i=0;i<=t;i++) { if(prime[i+1]-prime[i]==2) count++; } printf("%ld",count);

    return 0; }

    这道题虽然我有思路,但是还是花了蛮多时间,在改错上。 错的地方有两个,①数组的初始化,目前要初始化一个数组为不为0的值只能用循环,int a[10000]={1},会默认之后全部为0 ②超时问题,因为素数!!!!素数的判断其实可以单独写成一个函数,而且只用判断到sqrt(j),网上找到的见如下: int ss(int x) { if(x1 || x2 || x3 ) return 1; for(int j=2;j<=sqrt(x);j++) { if(x%j0) return 0; } return 1; }

    Processed: 0.012, SQL: 8