zoukankan      html  css  js  c++  java
  • 快速求小于N的所有素数

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

    //
    //  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

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

  • 相关阅读:
    RSA算法
    本地CodeForces
    基于Giolite 多人开发
    DES算法
    MD5算法
    仓库库存管理系统(C+MySQL+ODBC)
    Spring源码解析(一)开篇
    JDK动态代理实现源码分析
    J.U.C Atomic(一)CAS原理
    JDK 注解详解
  • 原文地址:https://www.cnblogs.com/dancingrain/p/3405231.html
Copyright © 2011-2022 走看看