博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区间素数的个数(埃氏筛法的基础上加内容)
阅读量:5355 次
发布时间:2019-06-15

本文共 1007 字,大约阅读时间需要 3 分钟。

给定整数a和b,请问区间[a,b)内有多少个素数?

a< b<=10^12

b-a<=10^6

输入 

22 37 
输出 
输入 
22801763489 2280178297 
输出 
1000

【分析】b以内的合数的最小质因数一定不超过sqrt(b)。如果有sqrt(b)以内的素数表的话,就可以把埃式筛法运用在[a,b)上了。也就是说,先分别做好[2,sqrt(b))的表和[a,b)的表,然后从[2,sqrt(b))的表中筛得素数的同时,也将其倍数从[a,b)的表中划去,最后剩下的就是区间[a,b)内的素数了。

1 #include
2 #include
3 using namespace std; 4 typedef long long ll; 5 const ll MAX_N=100050; 6 7 bool is_prime[MAX_N]; 8 bool is_prime_small[MAX_N+1]; 9 10 int segment_sieve(ll a, ll b)11 {12 int x = 0;13 for(int i = 0; (ll)i*i < b; i++) is_prime_small[i]=true;14 for(int i = 0; i < b - a; i++) is_prime[i]=true;15 16 for(int i = 2; (ll)i*i < b; i++)17 {18 if(is_prime_small[i])19 {20 for(int j = 2*i; (ll)j*j < b; j+=i) is_prime_small[j]=false;21 for(ll j=max(2LL,(a+i-1)/i)*i;j
>a>>b;35 segment_sieve(a,b);36 int cnt=0;37 for(int j=0; j
View Code

 

转载于:https://www.cnblogs.com/Yinchen-One/p/8922201.html

你可能感兴趣的文章
loadrunner解决浏览器死机问题
查看>>
正则表达式
查看>>
Android Studio常用插件
查看>>
代码仓库/模板合集 [持续更新]
查看>>
hibernate多对多关联
查看>>
操作系统-并发-线程-进程
查看>>
@Override must override a superclass method 有关问题解决
查看>>
Thrift 入门之helloWorld
查看>>
JS可维护性代码
查看>>
用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(下)-搭建Hadoop集群...
查看>>
https-->http
查看>>
requirejs配置代码示例
查看>>
2014025650《嵌入式系统程序设计》第五周学习总结
查看>>
Ubuntu环境下安装CUDA9.0
查看>>
用maven来创建web工程
查看>>
Java日语
查看>>
数据挖掘读书笔记 -- 常见数据处理技巧
查看>>
hive中行转换成列以及hive相关知识
查看>>
linux 文件已经删除,但是空间没有释放的原因
查看>>
数学之路-python计算实战(11)-机器视觉-图像增强
查看>>