素数判定

 

 

原先错误答案
#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

posted on 2015-03-25 13:30  l-m  阅读(119)  评论(0编辑  收藏  举报