素数筛法打表

原创 2016年05月31日 20:24:07

筛法打素数表是一种高效的打表方法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。就这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。需要注意的是,选取质数的时候,循环只需到sqrt(n)就可以。


#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define maxn 10000
int a[maxn],isprime[maxn];
int n;
void primetable()
{
    int i,j;
    memset(isprime,1,sizeof(isprime));
    isprime[0]=isprime[1]=0;
   int max=sqrt(maxn*1.0);
    for(i=2; i<=max; i++)
    {
        if(isprime[i])
        {
            for(j=2; j*i<=maxn; j++)
                isprime[i*j]=0;
        }
    }
    n=0;
    for(i=1; i<maxn; i++)
        if(isprime[i])
            a[n++]=i;
}
int main()
{
    primetable();
    for(int i=0; i<n; i++)
        printf("%4d ",a[i]);
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

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

这里主要说一下素数筛法,该方法可以快速的选取出1~N数字中的所有素数。时间复杂度远小于O(N*sqrt(N)) 方法为:从2开始,往后所有素数的倍数都不是素数。最后剩下的数都是素数。 再说说欧拉公...
  • hynuacmlshk
  • hynuacmlshk
  • 2016年07月20日 15:35
  • 836

筛法求素数

// 1:这是最原始的筛法,还有待优化 #define Max 1000000 bool prime[Max]; void IsPrime(){ prime[0]=prim...
  • lmq3110101637
  • lmq3110101637
  • 2014年06月29日 11:34
  • 165

筛法素数打表方法

埃拉托斯特尼筛法,是一种公元前250年由古希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。 给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是...
  • kun768
  • kun768
  • 2014年11月19日 00:19
  • 439

筛法打印质数表【附:100000以内质数表】

发现在做ACM题目的时候经常会用到一些质数,因此使用埃拉托斯特尼筛法打印质数表以保存之。 埃氏筛或爱氏筛,是一种公元前250年由古希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。 给出要筛数...
  • kingwolfofsky
  • kingwolfofsky
  • 2012年01月13日 21:29
  • 11011

素数打表的四种解法

题目:给出一个正整数n,打印出所有从1~n的素数(即质数);   1.傻瓜解法 复制代码   int i,n; while(scanf("%d",&n)!=EOF) { ...
  • gtuif
  • gtuif
  • 2017年06月26日 08:34
  • 432

素数筛法及其优化

今天试了一下素数筛法 要求1-100000范围内的素数,如果用自定义函数挨个求,对于大范围的求素数会非常耗时。复杂度为O(n * sqrt(n)),所以可以用素数筛法来求大范围内的素数 说一下原理...
  • sdutstudent
  • sdutstudent
  • 2016年12月21日 12:34
  • 686

素数筛法

数论 素数 筛法
  • Once_HNU
  • Once_HNU
  • 2011年04月05日 00:03
  • 18687

筛素数法--模板

标准筛素数法 核心代码: const int MAXN=1005; bool flag[MAXN]; int primes[MAXN/3],pi; void prime() { int i,j...
  • Akahieveman
  • Akahieveman
  • 2016年07月23日 13:35
  • 408

算法之素数筛法

方法一 //判断是否是一个素数 int IsPrime(int a){ //0,1,负数都是非素数 if(a ...
  • SJF0115
  • SJF0115
  • 2013年03月20日 09:08
  • 8016

超快素数筛法程序

  • 2014年01月23日 13:50
  • 55KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:素数筛法打表
举报原因:
原因补充:

(最多只允许输入30个字)