题目大意:给定正整数a和b,请问区间[a,b)内有多少个素数

限制条件:a<b<=10^12    b-a<=10^6

样例:

22 37 3

22801763489 22801787297 1000

思路:由于b以内的合数的最小质因数一定不超过根号b,所以如果有根号b以内的素数表的话,就可以用埃氏算法运用在[a,b)上了。  也就是说,先分别做好[2,根号b)的表和[a,b)的表,

然后从[2,根号b)的表中筛得素数的同时,也将其倍数从[a,b)的表中划去,最后剩下的就是[a,b)以内的素数了。

看代码

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
const int maxn=1e6+10;
const int maxk=5e3+10;
const int maxx=1e4+10;
const ll maxe=1000+10;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
ll l,r;
bool is_prime[maxn],is_prime_small[maxn];
void solve()
{ll sum=0;for(ll i=0;i*i<r;i++) is_prime_small[i]=false;for(ll i=0;i<r-l;i++) is_prime[i]=false;//题目给的范围太大,根本不可能开出那么大的数组,所以用r-l来存储for(ll i=2;i*i<r;i++){if(!is_prime_small[i]){for(ll j=2*i;j*j<r;j+=i) is_prime_small[j]=true;//筛选[2,根号b)的表for(ll j=max(i*2ll,l%i==0?l:(l/i+1)*i);j<r;j+=i)//为何是max(i*2ll,l%i==0?l:(l/i+1)*i),因为可能是第一个i*2,也有可能是后面的i*n*2,这就看l的值了
          {if(!is_prime[j-l]){is_prime[j-l]=true;//    cout<<j<<" ";sum++;}}}}// cout<<endl;if(l==1) sum++;//注意这里需要特判1if(l==0)    {        if(r==1) sum+=1;        else sum+=2;//特判0    }    cout<<r-l-sum<<endl;
}
int main()
{cin>>l>>r;solve();return 0;
}

转载于:https://www.cnblogs.com/caijiaming/p/9429868.html

区间内素数的个数(也要用到埃氏算法)相关推荐

  1. 统计素数并求和 (20 分)本题要求统计给定整数M和N区间内素数的个数并对它们求和。

    本题要求统计给定整数M和N区间内素数的个数并对它们求和. 输入格式: 输入在一行中给出两个正整数M和N(1≤M≤N≤500). 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以 ...

  2. 要求统计给定整数M和N区间内素数的个数,并对所有素数求和。

    题目内容: 要求统计给定整数M和N区间内素数的个数,并对所有素数求和. 其中两数必须满足条件: . 如果输入的M和N不能满足以上条件,则提示"输入数据错误". 输入格式: 在一行中 ...

  3. 本题要求统计给定整数M和N区间内素数的个数并对它们求和。

    本题要求统计给定整数M和N区间内素数的个数并对它们求和. 输入格式: 输入在一行中给出两个正整数M和N(1≤M≤N≤500). 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以 ...

  4. python acm 素数个数_湘潭大学OJ-1098求区间内素数个数问题

    求区间内素数个数问题 题目描述 Description 给定两个非负整数a,b,其中0<= a,b<=1,000,000,请计算这两个数之间有多少个素数.限制:Time Limit : 1 ...

  5. 计算机frequency函数,第二章 FREQUENCY函数按条件统计给定区间内的数据个数

    第二章 FREQUENCY函数按条件统计给定区间内的数据个数 作者:李锐(微博@Excel_函数与公式)微信公众号(ExcelLiRui) FREQUENCY函数不但可以对数据进行多段区间的个数统计, ...

  6. 三种素数筛总结——(朴素筛,埃氏筛,线性筛)

    但行好事,莫问前程. 题目背景 题目:(leetcode)204.计数质数 给定整数 n ,返回 所有小于非负整数 n 的质数的数量 . 对于这类求解素数个数有关的题目,通常采用质数筛算法. 本文不计 ...

  7. MPI实现求解10的八次方内素数的个数(版本一)

    使用MPI计算素数个数 算法实现所使用的方法: 当所要计算的个数达到10的8次方,甚至更多时,一台机器很难胜任这份工作. 使用MPI分布式并行计算可以实现这个目标,原来一个人干的事情现在让很多个人来干 ...

  8. 本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

    其中函数prime当用户传入参数p为素数时返回1,否则返回0:函数PrimeSum返回区间[m, n]内所有素数的和.题目保证用户传入的参数m≤n. 裁判测试程序样例: #include <st ...

  9. Python实验项目1例:使用进程池统计指定范围内素数的个数

    本周赠书活动:董付国老师Python系列教材赠书活动(40本) -------------------------------- 适用专业: 适用于计算机.网络工程.软件工程等相关专业,其他专业选做. ...

最新文章

  1. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★
  2. OAF TABLE中添加序号列
  3. 来自艾斯维尔的计算机科学系的期刊排行,研究生必备!
  4. DataGrip导入csv数据并把第一行作为列名
  5. 前端学习(3302):类组件父组件和子组件createRef
  6. 函数的结束条件和返回值 — return
  7. 大数据预测实战-随机森林预测实战(三)-数据量对结果影响分析
  8. Bootstrap 重置样式
  9. bzoj3203 [Sdoi2013]保护出题人 凸包+二分
  10. HashMap解决hash冲突
  11. JConsole使用教程
  12. 春节假期最值得阅读的10本书
  13. 计算机的供电方式,电脑主板电源供电方式
  14. matlab/simulink鼠标滚动设置成上下移动而不是缩放
  15. linux 缩小硬盘镜像,缩小qcow2格式kvm虚拟镜像磁盘大小[转]
  16. 【Python系列】Python写csv文件长数字变成科学记数法的解决方案
  17. 《认知天性》这本书对我的启发,以及我在日常中的应用
  18. Calendar类(日历)
  19. C语言——选择控制结构 寻找中位数v1.0编写一个函数返回三个整数中的中间数。函数原型:int mid(int a, int b, int c);功能是返回a,b,c三数中大小位于中间的一个数。
  20. unicode字符范围(包括中文、日语、韩文和各种特殊字符集)

热门文章

  1. Jscript 控制程序的流程
  2. 下一代的搜索引擎是什么样子?神经网络真的能「死记硬背」吗?
  3. 阿里粗排技术体系与最新进展
  4. java spring多数据源配置文件_深入理解spring多数据源配置
  5. Leetcode每日一题:197.rising-temperature(上升的温度)
  6. 容器转换类型,列表,集合,字典推导式
  7. 吴恩达机器学习ex8:推荐系统
  8. 【Java基本功】一文读懂final关键字的用法
  9. [bzoj 2768][bzoj 1877]
  10. 小程序 — 保存图片到手机相册①