您的位置:首页 > 其它

素数判定 SDUT 1241

2015-08-03 20:59 197 查看

题目描述

对于表达式n2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x,y<=50),判定该表达式的值是否都为素数。

输入

输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。

输出

对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。

示例输入

0 1
0 0


示例输出

OK


由于范围比较小,开始对方程打了个表,看看最大是多大,发现最大是2591,直接对3000以内的素数打表就OK了。

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int a[10010],b[100100];
int n,m;
int k=-39;
memset(b,0,sizeof(b));
for(int i=0; i<=89; i++)
{

a[i]=k*k+k+41;
k++;
}
for(int i=2; i<3000; i++)
{
for(int j=2; j<=sqrt(i); j++)
{
if(i%j==0)
{
b[i]++;
}
}
}
int c;
while(~scanf("%d%d",&n,&m))
{
c=0;
if(n==0&&m==0)break;
for(int i=n; i<=m; i++)
{
if(b[a[i+39]]==0)
{
c++;
}
}

if(c==m-n+1)
printf("OK\n");
else
printf("Sorry\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: