zoukankan      html  css  js  c++  java
  • 计算质数的各种算法

    教科书的示例

    其想法很简单,先写一个判断是否是质数的函数isPrime(),然后从1到n分别调用isPrime()函数来检查。检查是否是质数的算法是核心,其简单的使用从2到n的开根的数作为除数。这样的算法复杂度几乎是O(n*log(n)),看上去不错,但其实很不经济。

     1 #include<iostream>
     2 using namespace std;
     3 
     4 bool isPrime(int nr)
     5 {
     6     for(int d=2;(d*d)<(nr+1);++d)
     7     {
     8         if(!(nr%d))
     9         {
    10             return false;
    11         }
    12     }
    13     return true;
    14 }
    15 int main(int argc,char *const argv[])
    16 {
    17     for(int i=0;i<50;i++)
    18     {
    19         if(isPrime(i))
    20         {
    21             cout <<i<<endl;
    22         }
    23     }
    24     int a;
    25     cin>>a;
    26 }

    “埃氏筛法”求1000以内的素数C++

    我们知道,我们的算法如果写成线性算法,也就是O(n),已经算是不错了,但是最好的是O(Log(n))的算法,这是一个对数级的算法,著名的二分取中(Binary Search)正是O(Log(n))的算法。通常来说,O(Log(n))的算法都是以排除法做为手段的。所以,找质数的算法完全可以采用排除法的方式。如下所示,这种算法的时间复制度为O(n*lglgn),空间复杂度为O(n)

     1 #include<cstdio>
     2 #include<cmath>
     3  
     4 int num[1001] = {0};//合数标记为1,素数和未判断的数标记为0;
     5 int primeCount = 0;//primeCount为(素数的个数)
     6 int prime[1001];//存储素数
     7  
     8 void findPrime() {
     9     
    10     for (int i = 2; i <= 1000; ++i) {
    11         if (!num[i]) {
    12             primeCount++;
    13             prime[primeCount] = i;
    14             for (int j = 2 * i; j <= 1000; j += i) { 
    15                 num[j] = 1;
    16                 
    17             }
    18         }
    19   }
    20 }
    21  
    22 int main() {
    23     findPrime();
    24     for (int i = 1; i <=primeCount; ++i) {
    25         if (i % 10 == 0) printf("%3d
    ", prime[i]);
    26         else printf("%3d ", prime[i]);
    27     }
    28     getchar();
    29 }
    30     
  • 相关阅读:
    如何实现虚拟机(VirtualBox)中的Ubuntu与Windows XP间的数据共享
    linux中安装sqlmap
    LookupError: unknown encoding: cp65001解决办法
    共勉
    Linux中安装Nginx
    touch: cannot touch `/home/tomcat7/logs/catalina.out': Permission denied
    程序猿的十一条浮躁表现
    MySQL中varchar类型排序
    Gson和FastJson
    jquery-messager-消息提示
  • 原文地址:https://www.cnblogs.com/CheeseIce/p/10455956.html
Copyright © 2011-2022 走看看