题干:

 

解题报告:

 

AC代码1:

#include<bits/stdc++.h>
#define MAX 10000//求MAX范围内的素数
using namespace std;

long long su[MAX],cnt;
bool isprime[MAX];
void prime()
{
cnt=1;
memset(isprime,1,sizeof(isprime));
isprime[0]=isprime[1]=0;
for(long long i=2;i<=MAX;i++)
{
if(isprime[i]) {
su[cnt++]=i;
}
for(long long j=1;j<cnt&&su[j]*i<MAX;j++)
{
isprime[su[j]*i]=0;
}
}
}
int main()
{
prime();
int tmp=0;
int x,y,flag;
while(~scanf("%d %d",&x,&y) ) {
if(x==0 && y == 0) break;
flag = 0;
for(int i = x; i<=y; i++) {
tmp = i*i+i+41;
if(!isprime[tmp] ) {
flag = 1;
break;
}
}
flag == 1 ? printf("Sorry\n") : printf("OK\n");
}
return 0;
}

AC代码2:

#include<stdio.h>
#include<math.h>
int isPrime(int x);
int main()
{
int i,flag;
int x,y;
while(scanf("%d",&x)!=EOF){
scanf("%d",&y);
flag=1;
if(x==0&&y==0){
break;
}
else{
for(i=x;i<=y;i++){
if(isPrime(i*i+i+41)==0){
flag=0;
break;
}
}
}
if(flag==1){
printf("OK\n");
}
else{
printf("Sorry\n");
}

}
return 0 ;
}
int isPrime(int x){
int i,flag=1;
for(i=2;i<sqrt(x);i++){
if(x%i==0){
flag=0;
break;
}
}
return flag;
}