题干:
解题报告:
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;
}