素数判定

来源:互联网 发布:手机网络劫持apk 编辑:程序博客网 时间:2024/04/28 06:20

 

 

原先错误答案
#include <stdio.h>
int main()
{
int i,n,m,y,x,t,c,a;
while(scanf("%d %d",&n,&m)!=EOF)
{if(n=0,m=0) break;
t=0;
for(i=n;i<=m;i++)
{a=i*i+i+41;

for(c=1;c<=a;c++)
{y=i%c;

if(y==0) t=1;
}

}
if(t==1) printf("OK");
else if(t==0) printf("Sorry");
}
return 0;
}

 

  调用函数isPrime

#include <stdio.h>
int isPrime(int a)
{
int i;
if(a<=1)
return 0;
for(i=2;i<a;i++)
{
if(a%i==0)   //题目说表达式的值都为素数,所以只要有一个不满足就不满足
return 0;
}
return 1;
}
int main ()
{
int c,n,m,sign;

while(scanf("%d%d",&n,&m)!=EOF)
{sign=1;
if(n==0&&m==0) break;
for(c=n;c<=m;c++)
{
if(!isPrime(c*c+c+41))
{sign=0;}
}
if(sign==1) printf("OK\n");
else printf("Sorry\n");
}
return 0;
}

 


其实算素数 只要整除2—根号a之间的数就可以了

#include <stdio.h>
int isPrime(int a)
{
int i;
if(a<=1)
return 0;
for(i=2;i*i<a;i++)
{
if(a%i==0)
return 0;
}
return 1;
}
int main ()
{
int c,n,m,sign;

while(scanf("%d%d",&n,&m)!=EOF)
{sign=1;
if(n==0&&m==0) break;
for(c=n;c<=m;c++)
{
if(!isPrime(c*c+c+41))
{sign=0;}
}
if(sign==1) printf("OK\n");
else printf("Sorry\n");
}
return 0;
}

 


自己答案纠正
#include <stdio.h>
int main()
{
int i,n,m,y,x,t,c,a;
while(scanf("%d %d",&n,&m)!=EOF)
{if(n==0,m==0) break;
t=0;
for(i=n;i<=m;i++)
{a=i*i+i+41;

for(c=2;c<a;c++)
{y=a%c;

if(y==0) t=1;
}

}
if(t==0) printf("OK\n");
else if(t==1) printf("Sorry\n");
}
return 0;
}


1不是素数 这个题目的取值最少是41,所以不要单独考虑1

0 0
原创粉丝点击