素数筛选法的思想:对于不超过N的每个正整数,删除2P,3P,4P……,当处理完所有数之后,还没有被删除的就是素数。

按照上述思想写成的简单筛选法代码如下:

memset(vis,o,sizeof(vis));
for(int i=2;i<N;i++)
for(int j=i*2;j<=N;j+=i) vis[j]=1;
//用vis数组存储数j是否被删除的信息。 

下面我们想想如何改进:

1.由唯一分解定理:每个正整数可以写成n=a1^p1*a2^p2……(其中a1,a2是质数)

改进代码:

memset(vis,0,sizeof(vis));
for(int i=2;i*i<=m;i++) if(!vis[i])//判断i是质数,
for(int j=i*i;j<=n;j+=i) vis[j]=1;//直接从i*i开始 

这个改进了的代码也会有重复筛选的情况存在,比如数16,81等

下面给出最优的欧拉筛法,真正的o(n)复杂度

    const int N=1000000+5;  int check[N],prime[N];  memset(prime,0,sizeof(prime));  memset(check,0,sizeof(check));  int ptot=0;  for(int i=2;i<=n;i++){  if(!check[i]) prime[ptot++]=i;  for(int j=0;j<ptot;j++){  if(prime[j]*i>n) break;  check[prime[j]*i)=1;  if(i%prime[j]==0) break;//区别第二个代码的一步  }  }   

欧拉筛法和第二个代码 思想类似,只是多了关键了一步,“ifi%prime[j]==0) break;"

为什么要这样做呢?

分析第二个代码,它极大地避免了重复的筛选,它的外层筛选只选取质数,内层循环避免了2*3和3*2的这种重复筛选

但是像24这种既可以分解为2*12,又可以分解为3*8的来说,第二个代码就没有避免对24的重复筛选。

下面给出欧拉筛法里面关键一步的原理证明

设合数n的最小质因数为p,另一个比它大的质因数为p1,设n=p*m=p1*m1;因为p和p1互质,则p|m1;另外可以知道m1<m,故若在i为m1的时候对n筛选一次的话,那么在后面i为m的时候,又会对n筛选一次,所以需要判断m1%p==0;(可以证明起冲要性)这样就会只在i为m的时候对n进行筛选,实现了对每一个数只筛选一次。

素数筛选以及优化分析相关推荐

  1. python使用集合实现筛选法求素数-python素数筛选法浅析

    原理: 素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.在加密应用中起重要的位置,比如广为人知的RSA算法中,就是基于大整数的因式分解难题,寻找两个超大的素数然后相乘作 ...

  2. 51nod 1536不一样的猜数游戏 思路:O(n)素数筛选法。同Codeforces 576A Vasya and Petya‘s Game。

    废话不多说,先上题目. 51nod Codeforces 两个其实是一个意思,看51nod题目就讲的很清楚了,题意不再赘述. 直接讲我的分析过程:刚开始拿到手有点蒙蔽,看起来很难,然后......然后 ...

  3. Mysql的执行顺序与优化分析

    编写顺序与执行顺序分析 一条完整的sql语句编写流程应该如下: select distinct 查询字段   from 表名  JOIN 表名    ON 连接条件   where 查询条件   gr ...

  4. NUC1931 Problem D 区间素数【素数筛选】

    Problem D 区间素数 时间限制: 1000ms 内存限制: 65535KB 问题描述 给定一个闭区间[L,R],求区间中所包含的素数的个数. 输入描述 有空格分隔开的两个正整数L,R(1≤L≤ ...

  5. 素数筛选法 (求1~n的素数)

    1.下面是求1~n的素数的一般方法: //求1~n的素数一般方法 #include<iostream> using namespace std; int main() {int n,i,j ...

  6. 【PHP开源产品】Ecshop的商品筛选功能实现分析之一(主要对category.php进行分析)

    [PHP开源产品]Ecshop的商品筛选功能实现分析之一(主要对category.php进行分析) 一.首先,说明一下为什么要对category.php文件进行分析. (1)原因如下: ①个人对商城类 ...

  7. mysql高级篇(二)mysql索引优化分析

    mysql高级篇笔记 mysql高级篇(一)mysql的安装配置.架构介绍及SQL语句的复习. mysql高级篇(二)mysql索引优化分析. mysql高级篇(三)查询截取分析(慢查询日志).主从复 ...

  8. 通过蛋白结构分析、同源建模、分子对接、虚拟筛选、构效关系分析、药效团靶点抑制剂筛选预测、全新药物设计,先导化合物发现等方法对靶点药物进行全方位设计及分析

    [一]专题目录 专题一:CADD药物分子相互作用.分子对接.靶点预测 2022年03月26日-03月27日 在线直播 2022年04月03日-04月04日 在线直播 专题二:薛定谔靶点抑制剂虚拟筛选. ...

  9. 双目标帕累托优化_结构力学中的优化分析(3) —— 结构优化分析

    引言 上文中,我们主要介绍了优化分析的基本类型. 蒙特遇见卡罗:结构力学中的优化分析(1) -- 优化方法基本概念​zhuanlan.zhihu.com 蒙特遇见卡罗:结构力学中的优化分析(2) -- ...

最新文章

  1. Android群英传笔记——第四章:ListView使用技巧
  2. layUI框架中文件上传前后端交互及遇到的相关问题
  3. jaxb注解使用_使用JAXB时
  4. android JNI(转)
  5. 绕过图片防盗链的方法
  6. 万亿美元软件浪潮来临,开发者是核心!
  7. 3.5英寸万转硬盘的末路(万转“偏瘫”记连载二)
  8. JDK11 下载与安装
  9. 奖励 CSDN 社区的领军人物
  10. 靠写文章,我在CSDN赚了1.27万!
  11. [颜色知识] 潘通色卡、CMYK、RGB、 ARGB...
  12. k8s 安装 elasticsearch(ECK)
  13. 解决前端跨域的问题.Access to XMLHttpRequest at http://xxx.xxx from origin 'http://localhost:8000' has been bl
  14. 域名通过ipv6解析SSL协议无法访问
  15. oracle 监听 宕机,由重启引起的Oracle RAC节点宕机分析及追根溯源
  16. 亿起发网站主获取CPS数据接口说明
  17. ”舌上有龙泉,杀人不见血,生而为人,需得择善而行”
  18. 纸牌屋第一季(2)--part2
  19. 递增的三元子序列(来源力扣)
  20. 中国软件欧美出口工程名单:金蝶等入选第一梯队

热门文章

  1. 【Python 爬虫】 4、爬虫基本原理
  2. 【VC基础】 5、对象相关性(Object Dependencies)
  3. 【MM模块】Cycle Counting 周期盘点
  4. abap 弹出对话框函数POPUP_GET_VALUES的使用方法
  5. Mule,目前综合状态最良好的开源ESB方案
  6. 用户接口(User exit)
  7. SAP的client概念
  8. SAP登陆界面TITLE修改方法(Method of SAP Logon GUI Title Modification)
  9. 从“不务正业”到“回归本行”,“中年”雅戈尔的偶然与必然
  10. c 传图片数据给matlab,c++ - 如何通过UDP将数据从C ++应用程序发送到Matlab并进行绘制 - 堆栈内存溢出...