码迷,mamicode.com
首页 > 编程语言 > 详细

获取小于N的素数 优化筛选法的C++实现

时间:2015-04-10 09:37:22      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:c++   素数   优化筛选法   

孪生素数(间隔为2的相邻素数)的相关定理与推论

P1: 当 N 不小于 6 且 N-1 和 N+1 为 孪生素数, 则 N 一定是 6的倍数

T1:当 N 不小于 1 且 N=6x-1 或 N=6x+1 不是素数, 那么 N 一定不是 2和 3的倍数

P2:当N 不小于 5 时,若 N 为素数,那么N mod 6 =1或N mod 6 = 5

T2: 一个大于5的数有且只有整除6余数是 1 或者 5 才有可能是素数

一个数 整除6 的余数 可能是 1,2,3,4,5 但是 余数 为2,3,4的情况下 肯定是合数

具体代码如下

/*
 ***************************************************************
 *    NAME: select_prime.cpp
 *    DESC:
 *  AUTHOR: Liu Dongguo(jealdean@outlook.com)
 * VERSION: 1.0
 *  CREATE: 2015-04-09 13:59:45
 *  LUTIME: 2015-04-10 01:53:40
 *
 * Copyright (c) 2007 - 2015 Abodu.com,Inc. All Rights Reserved
 *
 ***************************************************************
 */

#include <stdio.h>
#include <math.h>
#include <string.h>

char* GetPrimesLessN(int nSize) //nSize是上限值
{
    int fLen= nSize;
    char* flag=new char[fLen];//
    memset(flag,‘y‘,fLen);
    flag[0]=flag[1]=‘s‘; //排除0和1
    for(int i=2;i*i<nSize;)
    {
        for(int j=i*i;j<nSize;j+=i)
        {
            flag[j]=‘n‘;
        }
        //探测下一个素数距离当前素数的可能步长
        if(i==2) //2特殊:到3 的距离就是1
        {
            i++;
            continue;
        }
        //2,4,6当中的一个
        i+=2; 
        if(flag[i]==‘n‘) //2被标记过
        {
            i+=2; 
            if(flag[i]==‘n‘) //4前被标记过
                i+=2;
        }
    }
    return flag;
}
int main(int argc, char *argv[])
{
    int fLen= 10000;
    char* fls=GetPrimesLessN(fLen);
    int i= 0, cnt= 0;
    while(i<=fLen)
    {
        if(fls[i]==‘y‘) //内容是‘y‘的数组元素下标为素数
        {
            printf( "%5d ",i );
                cnt++;
            if(!(cnt%20))
                printf("\n");
        }
        i++;
    }
    printf( "\n0-%d has %d prime numbers.\n", fLen, cnt );

    delete(fls); //释放由GetPrimesLessN分配的内存
    return 0;
} /* end main */

获取小于N的素数 优化筛选法的C++实现

标签:c++   素数   优化筛选法   

原文地址:http://blog.csdn.net/liudglink/article/details/44971625

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!