关闭

素数筛法模板

164人阅读 评论(0) 收藏 举报
分类:
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
const int L=1000005,inf=1<<30,maxn=1005;
int prime[L];
bool is[L];
void getPrime()
{
    fill(is,is+L,1);
    is[1]=0;
    int np=0;
    for(int i=2;i<L;i++)
        if(is[i])
        {
            prime[++np]=i;
            for(int j=2*i;j<L;j+=i) is[j]=0;
        }
   // for(int i=1;i<=np;i++)
        //cout<<prime[i]<<" ";
}
int main()
{
    getPrime();
    return 0;
}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

快速线性筛法求素数 (模板+简单解释)

首先明确任何合数都能表示成一系列素数的积 第一种易于理解的方法: 注意对1的预处理即可,空间较大 var n,m,x,t :longint; i,j :longint; prime :a...
  • Eirlys_North
  • Eirlys_North
  • 2016-12-26 11:48
  • 361

算法之素数筛法

方法一 //判断是否是一个素数 int IsPrime(int a){ //0,1,负数都是非素数 if(a <= 1){ return 0; } //计算枚举上界,为防止double值带来的精度损失,所以采用根号值取整后再加1,即宁愿多枚举一个,也不愿少枚举一个...
  • SJF0115
  • SJF0115
  • 2013-03-20 09:08
  • 7882

素数筛法及其优化

今天试了一下素数筛法 要求1-100000范围内的素数,如果用自定义函数挨个求,对于大范围的求素数会非常耗时。复杂度为O(n * sqrt(n)),所以可以用素数筛法来求大范围内的素数 说一下原理: 开一个标记数组,全部初始化为true,0、1不是素数,直接从数组里划掉。 从2开始,凡是2的...
  • sdutstudent
  • sdutstudent
  • 2016-12-21 12:34
  • 343

求素数: 一般线性筛法 + 快速线性筛法

From: http://blog.csdn.net/dinosoft/article/details/5829550 素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功。 基本原则就是题目如果只需要判断少量数字是否为素数,直接枚举因子2 。。N^(0.5) ,看看能否整除N。 如...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2015-03-11 14:53
  • 1063

筛法高效求素数

【问题描述】:    试编写一个程序,找出2->N之间的所有质数。希望用尽可能快的方法实现。 【问题分析】:    这个问题可以有两种解法:一种是用“筛子法”,另一种是“除余法”。    如果要了解“除余法”,请看另一篇文章连接http://blog.csdn.net/redraime...
  • qq_24451605
  • qq_24451605
  • 2015-02-01 14:22
  • 692

普通素数 筛法求素数 二次筛法求素数 MillerRabin素数测试【模板】

普通素数判断 筛法求素数[1,N] 二次筛法求素数[L,R] Miller素数测试方法
  • u011676797
  • u011676797
  • 2015-04-15 13:11
  • 695

素数判定(素数筛法)(欧拉)

这里主要说一下素数筛法,该方法可以快速的选取出1~N数字中的所有素数。时间复杂度远小于O(N*sqrt(N)) 方法为:从2开始,往后所有素数的倍数都不是素数。最后剩下的数都是素数。 再说说欧拉公式,用来解决所有小于n中的数字有多少个与n互质,用Ψ(n)表示。 Ψ(n)=n*(1-1/q1)*...
  • hynuacmlshk
  • hynuacmlshk
  • 2016-07-20 15:35
  • 697

ACM基础知识储备-快速筛法求素数

求素数是程序设计比赛中经常遇到的问题,最基本的方法是通过素数的定义直接判断,只能被1和它本身整除的数就是素数了。这种方法适合判断单个数是否为素数,当要求一个范围内素数而这个范围又比较大时,这种方法就不太使用了,甚至程序要运行几分钟才能算出结果。 筛法的思想是去除要求范围内所有的合数,剩下的就是素数了...
  • stack_queue
  • stack_queue
  • 2016-12-10 20:46
  • 1699

欧拉线性筛法求素数(顺便实现欧拉函数的求值)

我们先来看一下最经典的埃拉特斯特尼筛法。时间复杂度为O(n loglog n) int ans[MAXN]; void Prime(int n) { int cnt=0; memset(prime,1,sizeof(prime)); prime[0]=prime[1]=0; for(int ...
  • NK_test
  • NK_test
  • 2015-05-29 23:02
  • 7426

筛选法求素数改进

以前稍微总结了下求素数的办法。但是无奈效率都不高。 今天逛了很多关于求素数的博客,于是总结了一下最终写出了一个筛选法的改进算法。 筛选法: (一般筛选法)这种方法比较好理解,初始时,假设全部都是素数,当找到一个素数时,显然这个素数乘上另外一个数之后都是合数(注意上面的 i*i , ...
  • slime_kirito
  • slime_kirito
  • 2015-06-15 22:24
  • 363
    个人资料
    • 访问:140911次
    • 积分:3120
    • 等级:
    • 排名:第12868名
    • 原创:192篇
    • 转载:18篇
    • 译文:0篇
    • 评论:15条
    最新评论