素数问题 c++
Problem Description今天,小猪猪学习了新的知识,孤儿数,孤儿数就是除了1和他本身,其他数都不是他的因子.他发现,这些孤儿数的分布是有规律的,如果一个区间[l,r]中有超过1/3的孤儿数,那这个区间就是孤儿区间.你知道怎么判断一个区间是不是孤儿区间吗?
Input
第一行:T,表示有T组数据(T<=10);
下面T行,每行两个数字l,r,你需要判断[l,r]是不是一个孤儿区间.
(l,r<1e9,当l>=1000时,保证区间长度>=100,所以你可不能暴力求素数哦!)
这里提供一个筛素数的模板,你可能需要用,用法如下,(仔细点别抄错了...):
/*
* 素数筛选,判断小于 MAXN 的数是不是素数。
* notprime 是一张表,为 false 表示是素数,true 表示不是素数
*/
const int MAXN=1000010;
bool notprime[MAXN];//值为 false 表示素数,值为 true 表示非素数
void init() {
memset(notprime,false,sizeof(notprime)); //需要#include<string.h>头文件
notprime[0]=notprime[1]=true;
for(int i=2; i<MAXN; i++)
if(!notprime[i]) {
if(i>MAXN/i)continue;
for(int j=i*i; j<MAXN; j+=i)
notprime[j]=true;
}
}
int main(){
init();
/*------这里写你的代码....*/
}
Output
如果区间是孤儿区间,输出"YES",否则输出"NO"
Sample Input
1
2 3
Sample Output
YES