题干:

 

解题报告:

 

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;
}