【基础练习】埃拉托色尼筛法求质数

跑了一个质数表,哈希可能能用到

一开始跑的是0x3f3f3f3f以内,这个数等于1061109567 十亿多一点 结果什么软件也打不开那么大的文件 里奥说估计有一亿多个质数

于是换成一千万以内 跑出来了

代码放上

上次忘了古诗文···还是两句

——夜来风雨声,花落知多少

——有约不来过夜半,闲敲棋子落灯花

版权声明:转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看

时间: 2024-10-07 06:32:49

【基础练习】埃拉托色尼筛法求质数的相关文章

电影里的代码之《机械姬》:筛法求质数

今天看了<机械姬>,探讨人工智能话题的电影,豆瓣评分7.5,还是蛮不错的一部电影.影片1:09:29处出现了一段python代码,细看了一下,发现是筛法求质数的python代码,写得非常简练的.先贴个电影的截图: 影片里的代码略微有点模糊,我重新打一遍,是下面这个样子的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #coding:utf8 import sys def sieve(n):    

利用筛法求质数

1 package algorithm; 2 //转载请注明 3 public class FilterPrime { 4 public static void filterPrime(int n) { 5 boolean[] isPrimes = new boolean[n+1]; 6 for(int i=2;i<=n;i++){ 7 isPrimes[i]=true; 8 } 9 isPrimes[2]=true; 10 for(int j=2;j<=n;j++){ 11 if(isPri

筛法求素数的最优算法+解释

筛法求素数: 求n内的素数.先用2去筛,即把2留下,把2的倍数剔除掉:再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉:接下去用下一个质数5筛,把5留下,把5的倍数剔除掉:不断重复下去……. 由此,我们可以写出基础版的筛法求素: const int maxn = 102410240; bool isp[maxn]; void init() { memset(isp, true, sizeof(isp)); isp[0] = isp[1] = false; const int max1 =

求质数的几种算法

1.根据质数的定义求 质数定义:只能被1或者自身整除的自然数(不包括1),称为质数. 利用它的定义可以循环判断该数除以比它小的每个自然数(大于1),如果有能被它整除的,则它就不是质数. 对应代码是: void printPrime(int n){//判断n是否是质数         boolean isPrime=true;//是否是质数的标志         for(int i=n-1;i>1;i—){//n除以每个比n小比1大的自然数 if(n%i==0){//如果有能被整除的,则不是质数

数论_筛法求素数

线筛,时间复杂度O(N log log N) 原理比较易懂,因为合数可以被分解为两个因数. 所以可以反过来,两个因数的乘积必定不是质数. 所以,通过一次次的枚举两个因数,合数就被"筛选"掉了,只留下质数在筛子里. 按照上述的原理,核心代码本应该是这样的: bool vis[MAXN] = {true, true, false}; for(i = 2; i <= N; i++) { for(j = 2; i*j <= N; j++) { vis[i*j] = true; //

埃拉托色尼筛法(Sieve of Eratosthenes)求素数。

埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法.从建立一个整数2~N的表着手,寻找i? 的整数,编程实现此算法,并讨论运算时间. 由于是通过删除来实现,而1和0则不是素数,所以从2,3,5以及其倍数删除. 用Data[]来储存所有的数,将替换好的数字存在Data[]当中 而只需做出将2,3,5以及能将这些数整除的数字替换为零:if(Data[j] % i == 0 ) Data[j]==0; 实现的代码段为: for (i = 2; i < n;

C#筛法求出范围内的所有质数

    科普篇:筛法是一种简单检定素数的算法.据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274-194年)发明的,又称埃拉托斯特尼筛法(sieve of Eratosthenes). 说实话,之前我在求质数的场合都是验证某一数是否为质数的,用定义求即可方便的得出结论,代码如下: 01: public static bool IsPrime(int n) 02: {//判断n是否是质数 03: if (n < 2) return false; 04: for (int i =

初等数论-Base-1(筛法求素数,欧拉函数,欧几里得算法)

前言 初等数论在OI中应用的基础部分,同机房的AuSquare和zhou2003君早就写完了,一直划水偷懒的Hk-pls表示很方,这才开始了这篇博客. $P.S.$可能会分部分发表. 筛法求素数 埃式筛素数 问题:求$[1,n]$中的所有素数 总体思路就是在$[2,n]$中每当我们找到一个新的素数,在把它加入我们的素数队列的同时我们把它的倍数全部打上标记(包括它自己),下一个没有被标记的数就是新的素数. void find_prime(int n){ memset(used,0,sizeof(u

Algorithm --&gt; 筛法求素数

一般的线性筛法 genPrime和genPrime2是筛法求素数的两种实现,一个思路,表示方法不同而已. #include<iostream> #include<math.h> #include<stdlib.h> using namespace std; const int MAXV = 100; //素数表范围 bool flag[MAXV+1]; //标志一个数是否为素数 int prime[MAXV+1]; //素数表,下标从0开始 int size=0; //