埃拉托色尼筛选法

埃拉托色尼筛选法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。 是针对自然数列中的自然数而实施的,用于求一定范围内的质数.
(1)先把1删除(现今数学界1既不是质数也不是合数)
(2)读取队列中当前最小的数2,然后把2的倍数删去
(3)读取队列中当前最小的数3,然后把3的倍数删去
(4)读取队列中当前最小的数5,然后把5的倍数删去
(5)如上所述直到需求的范围内所有的数均删除或读取

原文地址:https://www.cnblogs.com/wander-clouds/p/8454828.html

时间: 2024-10-12 11:45:20

埃拉托色尼筛选法的相关文章

算法笔记_012:埃拉托色尼筛选法

1 问题描述 Compute the Greatest Common Divisor of Two Integers using Sieve of Eratosthenes. 翻译:使用埃拉托色尼筛选法计算两个整数的最大公约数.(PS:最大公约数也称最大公因数,指两个或多个整数共有约数中最大的一个) 2 解决方案 2.1 埃拉托色尼筛选法原理简介 引用自百度百科: 埃拉托色尼筛选法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthene

【算法设计与分析基础】1、埃拉托色尼筛选法

就是筛选从1到n(不包括n)之间的所有质数 package algorithm.ch01; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.junit.Test; /** * 实现埃拉托色尼筛选法 * @author xiaof * */ public class Sieve { /** * 输入正整数 n > 1 * 输出:包含所有小于等于N的质数数组 * @p

leetcode实战—素数(埃拉托色尼筛选法包括证明、哈希、RSA)

前言 素数这个概念人类已经研究了上千年,但是的具体的起源却不得而知.早在公元前300年,欧几里得就在他的著作元素中证明了有无穷多个素数,同时也证明了任何一个整数都能够被某一个素数整除.时至今日,素数在计算机科学这样一个和数学联系紧密的学科中也有这个广泛的应用,比如布隆过滤器.伪随机数.RSA加密算法等等,所以掌握素数的特性以及应用能够帮助我们解决不少实际问题. 简介 素数(又称质数)是一个只能被1和它自己整除的整数,换句话说他只有两个因数--1和它自己.比如3是一个素数,因为3只能被1和3整除,

关于埃拉托色尼筛选法的整理(质数问题)

求素数的问题也有不少的算法,埃拉托色尼筛选法应该算是时间复杂度不大的一种算法.... 比如要求从1到n范围内的素数表,基本算法思想就是从第一个质数2开始,把2的所有倍数标记为非素数,然后进入到3,把3的所有倍数标记为非素数,然后跳过4(因为4是2的倍数而且已经被标记为非素数了),然后进入到5,把5的所有倍数标记为非素数,循环直至结束. 以上算法还可以继续改进,那就是最外层循环可以只遍历到根号n就行了.因为大于根号n的数要么是素数,要么就有一个小于根号n的因数(而这是不可能发生的,因为如果它有小于

素数筛选法

筛选法(埃拉托色尼(Eratosthenes)筛法)求素数,例如1~100 思想:逐个筛选,直到int(sqrt(100))个 1)因为1不是质数,将1筛去 2)2是质数,将2的倍数全都挖掉 3)3是质数,将3的倍数全都挖掉 4)4已经被挖去,不进行与4相关的操作 5)5是质数,将5的倍数全都挖掉 6)这个过程一直进行到后面的数全都挖掉为止 不是从1开始:如10~18----一个一个筛--->18 #include <stdio.h> #include <math.h> #i

Eratosrhenes筛选法

1简介 埃拉托色尼选筛法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家埃拉托色尼(Eratosthenes 274B.C.-194B.C.)提出的一种筛选法. 是针对自然数列中的自然数而实施的,用于求一定范围内的质数,它的容斥原理之完备性条件是p=H~. 2步骤 (1)先把1删除(现今数学界1既不是质数也不是合数) (2)读取队列中当前最小的数2,然后把2的倍数删去 (3)读取队列中当前最小的数3,然后把3的倍数删去 (4)读取队列中当前最小的数5,然后把5的

筛选法求素数

筛选法求素数,不断的用3,5,7,等素数作为筛子,筛除这些数的倍数,即将合数筛除.用辅助数组p记录数i是否是素数. vector<int> prime(int n) { vector<int> p(n+1); for(int i=2;i<=n;i+=2) { if(i%2==0&&i>2) p[i]=0; else p[i]=1; } for(int i=3;i<=(int)(sqrt((double)n));i+=2) { if(p[i]) fo

Eratosthenes筛选法构造1-n 素数表

筛选法:对于不超过n的每个非负整数p,删除2p,3p,4p...当处理完所有数之后,还没没删除的就是素数. 代码中进行了相应的优化. 1 #include<bits/stdc++.h> 2 using namespace std; 3 int vis[10000]; 4 int main() 5 { 6 int n; 7 while(scanf("%d",&n)) 8 { 9 //-------------- 10 int m=sqrt(n+0.5); 11 mem

hdu 5407 CRB and Candies(素数筛选法,除法取模(乘法逆元))

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5407 解题思路: 官方题解: The problem is just to calculate g(N) =\ LCM(C(N,0), C(N,1), ..., C(N, N))g(N) = LCM(C(N,0),C(N,1),...,C(N,N)). Introducing function f(n) =\ LCM(1, 2, ..., n)f(n) = LCM(1,2,...,n), the