埃筛

作者: dachengquan | 来源:发表于2020-08-04 19:16 被阅读0次

埃筛

给定一个整数N,求出1~N之间的所有质数,称为质数的筛选问题。埃筛线筛都是用于解决这个问题的算法。
埃筛的思想是任意一个整数x的倍数2*x,3*x,...都不是质数。从2开始,从小到大扫描每一个x,将他的倍数2*x,3*x,...,\lfloor N/x\rfloor *x全部标记为合数。
优化策略1,对于4来说,4的倍数都已经被2标记过一次了。没有必要在进行一次标记。如果一个数x是合数,那么他的倍数会被比x小的数,并且是x的质因数标记过。没有必要在标记一次。
优化策略2,对于5来说,10被2标记了,15被3标记过,20被2标记过。当我们标记p*x时,如果p<x那么p*x已经被p的质因子标记过了。没有必要在进行标记了。
如果我们只采用优化策略1,那么每个数x,会被他的不同的质因数标记一次。例如12会被2和3标记一次。int范围内的数最大的合数也只会被标记10次。埃筛的时间复杂度非常接近线性。

void primes(int n){
  memset(v,0,sizeof(v))
  for(int i = 2;i<=n;i++){
  if(v[i])continue;
  for(int j = i;j<=n/i;j++) v[i*j] = 1;
  }
}

相关文章

  • 埃筛

    埃筛 给定一个整数N,求出1~N之间的所有质数,称为质数的筛选问题。埃筛线筛都是用于解决这个问题的算法。埃筛的思想...

  • 埃氏筛

    埃拉托斯特尼筛法,简称埃氏筛,一种古老且简单的用来找出一定范围内所有的质数的算法。公元前250年由希腊数学家埃拉托...

  • 204. 计数质数

    204. 计数质数 最简单的质数筛埃式筛法

  • Python用fliter函数求素数

    常规方法: 埃式筛法:

  • 素数相关问题练习 C++

    辗转相除 素数判定 埃氏筛法

  • 质因子分解(素数埃氏筛法)[PAT A1059]

    埃氏筛法原理质因子分解结论

  • 判断素数-埃氏筛法的详解

    埃氏筛法 一个判断素数的高效算法 关于埃氏筛法的百度百科解释在这里埃拉托斯特尼筛法,当然我不可能给个百度百科的解释...

  • 埃氏筛法

    计算素数的一个方法:埃氏筛法 1.构造一个从3开始的奇数列 def _odd_iter(): n=1 whil...

  • 埃氏筛法

    首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1...

  • 埃氏筛(求素数)

    众多筛法中最简单且容易理解的一种,时间复杂度为O(nloglogn),在找到一个素数后,马上将所求范围内该素数的倍...

网友评论

    本文标题:埃筛

    本文链接:https://www.haomeiwen.com/subject/tpwrrktx.html