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

求素数的问题也有不少的算法,埃拉托色尼筛选法应该算是时间复杂度不大的一种算法。。。。

比如要求从1到n范围内的素数表,基本算法思想就是从第一个质数2开始,把2的所有倍数标记为非素数,然后进入到3,把3的所有倍数标记为非素数,然后跳过4(因为4是2的倍数而且已经被标记为非素数了),然后进入到5,把5的所有倍数标记为非素数,循环直至结束。

以上算法还可以继续改进,那就是最外层循环可以只遍历到根号n就行了。因为大于根号n的数要么是素数,要么就有一个小于根号n的因数(而这是不可能发生的,因为如果它有小于根号n的因数的话,那他就已经被筛掉了)。

代码如下所示:

 1 #include<iostream>
 2 #include<cstdio>
 3 #define N 10000
 4 using namespace std;
 5 int main()//从2开始往后看,凡是2,3,5的倍数全部筛掉
 6 {
 7     int i,j,k,a[N];
 8     for(i=2;i<N;i++)
 9         a[i]=1;
10     for(i=2;i<N;i++)
11     {
12         if(a[i])
13             for(j=i;i*j<N;j++)
14             {
15                 k=i*j;
16                 a[k]=0;
17             }
18     }
19     for(i=2;i<N;i++)
20         if(a[i])
21             printf("%d ",i);
22     return 0;
23 }
时间: 2024-10-18 20:57:37

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

算法笔记_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

埃拉托色尼筛选法

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

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

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

Eratosthenes筛选法计算质数

<C和指针>第6章第4道编程题: 质数就是只能被1和本身整除的数.Eratosthenes筛选法是一种计算质数的有效方法.这个算法的第一步就是写下所有从2至某个上限之间的所有整数.在算法的剩余部分,遍历整个列表并剔除所有不是质数的整数. 后面的步骤是这样的.找到列表中的第1个不被剔除的数(也就是2),然后将列表后面所有逢双的数都剔除,因为它们都可以被2整除,因此不是质数.接着,再回到列表的头部重新开始,此时列表中第一个尚未被剔除的第1个数是3,所以在3之后把每逢第3个数(3的倍数)剔除.完成这

素数筛选法

筛选法(埃拉托色尼(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的

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

HDU 1215.七夕节【筛选法】【7月26】

七夕节 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,而且和数字王国的人们说:"你们想知道你们的还有一半是谁吗?那就依照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己的还有一半.告演示样例如以下: 数字N的因子就是全部比N小又能被N整除的全部正整数,如12的因子有1,2,3,4,6. 你想知道你的还有一半吗? Input 输入数据的第一行是一个数字T(1<=T<=500000),它表明測试数据的组数.然后是T组測试数据,每组測试数据仅仅有一个数字N(