您的位置:首页 > 其它

区间素数筛模板

2016-10-10 16:52 246 查看
//前提:素数打表到sqrt(b)大小接口:qujiansushu(左端点,右端点)闭区间,返回区间中素数的个数
bool f[100005];
int qujiansushu(long long a,long long b)
{
int num = 0;
int l = b - a;//将a到b转化为从0到b - a
for(int i = 0 ; i < primeCount && prime[i] * prime[i] <= b ; i++)
{
int j = 0;
if(a % prime[i] != 0)//判断a + j 如果(a + j)% prime[i] != 0,找到离a最近且比a大的位置
j = j + prime[i] - a % prime[i];
if(a + j == prime[i])//如果a + j是素数,则找下一个
j += prime[i];
for(; j <= l ; j += prime[i])
f[j] = 1;//从j开始将含prime[i]因子的数标记(即筛除)
}
for(int i = 0 ; i <= l ; i++)
if(!f[i])
num++;
if(a == 1)//如果a从1开始,需要减去一个
num--;
return num;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息