其实判断一个数是不是素数很简单,但是判断一个区间里面所有的数是不是都是素数,这个问题就很大了,但是不要慌,因为慌也没什么用,我们继续往下走,其实是有一个一劳永逸的方法的,在数据范围并不是很过分的时候,打出素数表是一个不错的选择,这样的话面对着区间内的数字就可以很轻松的判断出结果,今天又去搬砖了,而且因为搬的不好快被老板撵走了,不知道还能撑几天
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2012
代码上面有注释
#include<cstdio>
#include<cmath>
#include<algorithm>
#define N 2600
using namespace std;
const int MAX_N = 100010;
int prime[MAX_N];//用来存储数字的状态,如果prime[i]为1就说明i是素数
//为0就不是素数
void sovle();
int main(void)
{
sovle();
int x, y, flag;
while(scanf("%d %d", &x, &y))
{
flag = 1;
if((x == 0) && (y == 0))
{
break;
}
for(int i = x; i <= y; i++)//枚举区间里面的所有的数
{
int n = (i*i) + i;
n = n + 41;
if(prime[n] == 0)
{
flag = 0;
break;
}
}
if(flag == 0)
{
printf("Sorry\n");
}
else
{
printf("OK\n");
}
}
}
void sovle()
{
for(int i = 0; i <= N; i++)//数组初始化
{
prime[i] = 1;
}
for(int i = 37; i <= N; i++)//在这道题里面范围是可以估算出来的
{
for(int j = (2*i); j <= N; j+=i)
{
prime[j] = 0;
}
}
}