判断 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;
}
出师不利,明天继续