PAT素数对猜想

判断 i 是不是素数的简单方法:

从全屏的答案错误到全屏的答案正确一共花费了接近1个半小时。效率及其低下但是收获感觉还不错

1.只需要判断 i 是否能被2到根号 i 之间的某个数整除,如果可以则不是素数,反之就是素数

2.PAT中不要随意使用printf来提示输入,printf也是一个测试点

3.当超时时就要想想是不是他为了让你学到一些简化的技巧经验,以及函数是否可以简化为几行代码

4.当printf也没反应时,就要考虑是不是变量定义的多了

5.PAT中经常使用 if(scanf("%d",&N)){};来去除掉那个warning

6.可以熟练使用   a[k++]=j   这种语句

最初全绿的代码

#include<stdio.h>
int sushu(int n);

int main()
{
    int j,n;
    int mount=0;
    printf("请输入一个正整数N:");
    if(scanf("%d",&n)){};
        
    for(j=3;j<n;j+=2)
    {
        if(sushu(j)&&sushu(j+2))
        {
            mount++;
        }
    }
    printf("%d",mount);
    return 0;
}
int sushu(int n)
{
    int i;
    int flag = 1;
    for(i=2;i<n/2+1;i++)
    {
        if(n%i==0)
        {
            flag = 0;
            break;
        }
    }
    return flag;
}

修改了以后全对的代码

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,N,m,a[10000];
    int mount=0,k=0;
    if(scanf("%d",&N)){};
        
    for(j=3;j<=N;j+=2)
    {
        for(i=2;i<=sqrt(j);i++)
        {
            if(j%i==0)
                break;
        }
        if(i>sqrt(j))
        {
            a[k++]=j;
        }
    }
    for(m=0;m<=k;m++)
    {
        if(a[m+1]-a[m]==2)
        {
            mount++;
        }
    }
    printf("%d",mount);
    return 0;
}

出师不利,明天继续

上一篇:SQL中连接(JOIN)子句介绍


下一篇:【源码篇:总结与思考】虚拟节点与DOM Diff算法源码实现