zoukankan      html  css  js  c++  java
  • 求第N个素数

    埃拉托斯特尼筛法

    如果求第n 个素数,有一个数学公式可以得到第n 个素数的上界:uper=n*ln(n)+n*ln(ln(n)),n>=6。如果一个数是素数那么这个数的倍数是非素数因此例如2是素数,2+2,2+2+2,2+2+2+2,.......就是非素数,我们可以开一个数组,数组的值为0/1,0表示非素数,1表是素数,那么只要找到第n个值为1的数组他的下标就是要求的值,只要把2到根号uper中所有的素数的倍数标记为0就行,x=2,a[x]=0,a[x+2]=0........。

    代码:

     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 bool a[1000000005];
     5 int main()
     6 {
     7     int n;
     8     while(cin>>n)
     9     {
    10         int uper=n*log(n)+n*log(log(n));
    11         for(int i=2;i<=uper+1;i++)
    12         a[i]=1;
    13         for(int i=2;i*i<=uper;i++)
    14         {
    15             if(a[i])
    16             for(int j=i+i;j<=uper;j+=i)
    17             a[j]=0;
    18         }
    19         int sum=0;
    20         for(int i=2;;i++)
    21         {
    22             if(a[i])
    23             sum++;
    24             if(sum==n)
    25             {
    26                 cout<<i<<endl;
    27                 break;
    28             }
    29         }
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    Linux下的输入/输出重定向
    strcpy与strncpy的区别
    C++的函数重载
    gtest 学习二
    gtest 学习一
    char* wchar* char wchar转换
    iconv 编译不通过问题
    嵌入式常用库
    驱动编程class_create说明
    libiconv 交叉编译
  • 原文地址:https://www.cnblogs.com/--ZHIYUAN/p/5948654.html
Copyright © 2011-2022 走看看