埃拉托斯特尼(公元前276—公元前194)

埃拉托斯特尼是古希腊著名的数学家、地理学家、天文学家。他先在亚历山大港学习,后又转至雅典。公元前236年,托勒密三世指定他为亚历山大图书馆的图书管理员和馆长。他跟阿基米德是好朋友。埃拉托斯特尼的主要贡献包括:

埃拉托斯特尼筛法:寻找素数的方法。

地理常数测量:日地间距的测量(现在称一个这样的距离为一个天文单位)、地月间距的测量、测量赤道与黄道之间的偏角、地球半径测量等。

精确地图绘制:当时只有托勒密等级的人物能绘出同等级的地图。

算法数学原理:
埃拉托斯特尼筛法是快速筛选素数的算法,在处理大量整数是否是素数时有较高的效率。

例:筛选小于n的整数并记录结果。

解:计算sqrt(n),∵对于任意的z<n,若z为合数,不妨设z=a*b,则必有min(a,b)<sqrt(n)

∴所有小于n的合数均可被小于sqrt(n)的整数整除

从2开始,依次去除小于n的整数中能被其整除的数,最后剩下的就是素数

int prime[maxn];
bool is_prime[maxn];//is_prime[i]是true表示i是素数
//返回n以内素数的个数
int sieve(int n)
{int p=0;for(int i=0;i<=n;i++) is_prime[i]=true;is_prime[0]=is_prime[1]=false;for(int i=2;i<=n;i++){if(is_prime[i]){prime[p++]=i;for(int j=2*i;j<=n;j+=i) is_prime[j]=false;}}return p;
}

  例题:洛谷 P1865  ,

codevs3223 素数密度

[a,b]的素数,只需要

[2,b√]
的素数表即可。这样我们可以筛出这些素数,然后用这些素数筛[a,b]。

注意,j=max(2ll,(l+i-1)/i)*i的意思:

(l+i-1)/i表示大于等于a的i的倍数的最小值。
2则是普遍的i的倍数的最小值,一定不能小于2。
再乘i,j就可以枚举[a,b]之间的合数了。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int SIZE=1000010;
bool vis[SIZE];
bool pri[SIZE];
typedef long long LL;
int main()
{LL l,r;scanf("%lld%lld",&l,&r);for(LL i=2;i<=sqrt(r);i++){if(!vis[i]){for(LL j=i*i;j<=sqrt(r);j+=i) vis[j]=1;for(LL j=max(2ll,(l+i-1)/i)*i;j<=r;j+=i) pri[j-l]=1;  }}int ans=0;for(int i=0;i<=r-l;i++) if(!pri[i]) ans++;printf("%d",ans);return 0;
}

  

转载于:https://www.cnblogs.com/passion-sky/p/10087034.html

数论_埃氏筛法(求区间内多少素数)相关推荐

  1. 埃氏筛法求素数(C语言)

    问题要求: 用埃氏筛法求100000以内的素数,并输出总个数. 知识简介: 埃氏筛法,全名埃拉托斯特尼筛法,也叫爱氏筛法,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法. 要得到 自然数 ...

  2. 【中国大学MOOC】java程序设计-week3-用“埃氏筛法”求2~100以内的素数

    1.题目 用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数. 要求使用数组及增强的for语 ...

  3. Java用“埃氏筛法”求素数

    用"埃氏筛法"求素数. 先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,--依此类推,最后剩下的就是素数. 要求:使用数组,使用数组的长度,使用增强的for语句 import ja ...

  4. 用“埃氏筛法”求2~10000以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。

    需求:用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数.(JAVA语言编写) 埃氏筛选:要 ...

  5. Week 2互评作业:用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。

    用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数. 要求使用数组及增强的for语句. pa ...

  6. Week3 互评作业:用“埃氏筛法”求2~100以内的素数。java实现

    问题描述 用"埃氏筛法"求2-100以内的素数.2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,--依此类推,最后剩下的就是素数. 要求使用数组及增强的for语 ...

  7. 埃氏筛法求质数(例如:200以内的质数)

    传统求质数 全部遍历,是否有因数可以整除 private boolean isPrime(int n){if(n < 2){return false;}if(n == 2 || n == 3 | ...

  8. C语言 埃氏筛法求素数

    题目 用埃拉托色尼筛选法求素数,n(<1000)由用户输入.每行输出5个: 原理 首先将0.1排除: 对于初始队列{2,3,4,5,6,7,8,9,10,11,12,13,14--n},操作步骤 ...

  9. java 埃氏筛法_筛法

    素数与最大公因子2021-02-12 17:32:04 素数 定义: 素数是大于 \(1\) 的正整数, 并且除了 \(1\) 和它本身外不能被其他正整数整除. 素数的数量: 不超过 \(N\) 的素 ...

  10. 线性筛法求素数c语言,[算法]素数筛法(埃氏筛法线性筛法)

    一.素数筛的定义 给定一个整数n,求出[1,n]之间的所有质数(素数),这样的问题为素数筛(素数的筛选问题). 二.埃氏筛法(Eratosthenes筛法) 埃氏筛法又叫做Eratosthenes筛法 ...

最新文章

  1. 黑客进阶必读书《Linux命令行与Shell脚本编程大全》(第2版)
  2. 在Windows下创建硬连接和文件夹连接点的工具
  3. Python中os和shutil模块实用方法集锦
  4. VMware三种网络模式根本区别(图)
  5. 二进制安装kubernetes1.14.1-pod配置清单之客户端访问方式03
  6. java access group by_sql – 在Access中连接记录和GROUP BY
  7. pgsql vs mysql查询_对比平台--SQL Server Vs PostgreSQL
  8. 机器人网首页应用实例工业自动化 EtherCAT 技术在库卡机器人控制系统上的应用
  9. 合并排序算法排序过程_合并排序| 用于大型输入的最佳排序算法之一
  10. Python学习(九)IO 编程 —— 文件夹及文件操作
  11. java修炼之道_《Java程序员修炼之道》
  12. 【毕业设计】JAVA文件压缩与解压缩实践(源代码+论文)
  13. 2.技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化...
  14. WF4.0 RC 对比 Beta2 的变化
  15. 使谷歌浏览器兼容ie浏览器
  16. php源码安装图文教程_安装PHP的教程及说明(图文详解)
  17. 计算机硬盘按数据传输,同时让多个硬盘轻松同步数据传输
  18. SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模
  19. 爬虫三(Bs4搜索、Selenium基本使用、无界面浏览器、Selenium自动登录百度案例、自动获取12306登录验证码案例、切换选项卡、浏览器前进后退、登录Cnblogs获取Cookie自动点赞)
  20. HTML5 网页添加背景音乐

热门文章

  1. HTML5期末大作业:爱宠之家网站设计——蓝色版爱宠之家(5页) 致热爱动物网页设计作品 大学生爱宠专题网页设计作业模板 动物静态HTML网页模板下载
  2. 杭州餐饮掀起资本浪 多家浙江餐饮企业获vc关注
  3. Web前端工程师职业方向定位
  4. Java 拾遗补阙 ----- 继承父类的成员变量与方法区别
  5. 百度关键词搜索量查询,百度,谷歌关键词查询工具
  6. Python流程控制
  7. 托业考试简述 — 托业考试题型、托业考试结构、托业考试考场时间、托业考试学习策略
  8. 第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列
  9. linux修改shell前缀,Linux shell控制台改变显示前缀
  10. 使用canal实现MySQL 8 全量同步数据到 ElasticSearch 7.15.2中 linux