现在的位置: 首页 > 综合 > 正文

快速求小于N的所有素数

2018年02月01日 ⁄ 综合 ⁄ 共 748字 ⁄ 字号 评论关闭

首先,贴上实现的源代码:

//
//  main.cpp
//  testC++1
//
//  Created by fei dou on 12-7-26.
//  Copyright (c) 2012年 vrlab. All rights reserved.
//

#include <iostream>
#include <cmath>
using namespace std;

void primeLessThanN( int n)
{
    if(n < 1) return ;
    bool *isPrime = new bool[n+1];//动态生成一个数组
    memset((void*)isPrime, true, (n + 1)*sizeof(bool));
    
    int sqrtOfN = sqrt(n);
    isPrime[0] = false;
    isPrime[1] = false;
    for( int i = 0; i <= sqrtOfN; ++ i )
        if(isPrime[i] == true)
            for(int j = i*i; j <= n; j +=i)
                isPrime[j] = false;
    
    int count = 0;
    for(int m = 0; m <= n ; m ++)
    {
        if(isPrime[m] == true)
        {
            printf("%-5d    ",m);
            ++ count;
            
            if( count % 5 == 0 )
                printf("\n");
        }
    }
    
    delete[] isPrime;//释放空间
}

int main (int argc, const char * argv[])
{    
    primeLessThanN(32768);
    return 0;
}

本程序使用的是Sieve of Eratosthenes方法,这是一种快事求取小于N的所有素数的方法。

它的具体原理可以参考:http://en.wikipedia.org/wiki/Eratosthenes_Sieve

如果有什么不太名白的地方可以给我留言,大家一起探讨!

抱歉!评论已关闭.