集训笔记---素数筛选算法(HDUOJ NO.2012 素数判定 数论)

其实判断一个数是不是素数很简单,但是判断一个区间里面所有的数是不是都是素数,这个问题就很大了,但是不要慌,因为慌也没什么用,我们继续往下走,其实是有一个一劳永逸的方法的,在数据范围并不是很过分的时候,打出素数表是一个不错的选择,这样的话面对着区间内的数字就可以很轻松的判断出结果,今天又去搬砖了,而且因为搬的不好快被老板撵走了,不知道还能撑几天

题目链接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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/zzuli_xiaomingke/article/details/81743009