您的位置:首页 > 其它

素数判定

2015-03-25 13:30 218 查看


原先错误答案
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: