前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线性筛法求质数(素数)表 及其原理

线性筛法求质数(素数)表 及其原理

作者头像
owent
发布2018-08-01 17:22:18
8600
发布2018-08-01 17:22:18
举报
文章被收录于专栏:owentowent
代码语言:javascript
复制
/**
 * 线性筛法求素数表
 * 复杂度: O(n)
 */
const long MAXP = 1000000;
long prime[MAXP] = {0},num_prime = 0;
int isNotPrime[MAXP] = {1, 1};
void GetPrime_Init()//初始化调用
{
    for(long i = 2 ; i <  MAXP ; i ++)
    {
        if(! isNotPrime[i])
            prime[num_prime ++]=i;
        for(long j = 0 ; j < num_prime && i * prime[j] <  MAXP ; j ++)
        {
            isNotPrime[i * prime[j]] = 1;
            if( !(i % prime[j]))
                break;
        }
    }
}

线性筛法,即是筛选掉所有合数,留下质数

我们知道合数可以由一个质数数与另一个数相乘得到

而同时假设合数a=质数b×质数c×一个数d

令e=c × d,假设b ≥ e,e为合数,令f=d × b

a=f × c ,其中c

即比一个合数数大的质数和该合数的乘积可用一个更大的合数和比其小的质数相乘得到

这也是if(!( i % prime[j]))break;的含义,这也是线性筛法算质数表的关键所在

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档