簡體   English   中英

在 C++ 中找到自然數系列中的第 10001 個素數

[英]Finding 10001st prime number in series of natural numbers in C++

我這里有個小問題。 我應該在自然數系列中找到第 10001 個素數。 我可以使用下面的代碼生成素數,但是如何找出第 10001 個數字? 計算需要很長時間

#include <iostream>
using namespace std;

bool isPrime(int n){
    for(int i=2; i<=n-1;i++){
        if(n%i==0){
            return false;
        }
    }

    return true;
}

void generatePrime(int N){
    for(int i=2; i<=N; i++){
        if(isPrime(i)){
            cout<<i<<" ";
        };
    };
};

int main(){

    int n = 10001;

    generatePrime(n);

};

您正在尋找的本質上是一個“循環計數器”,或者是一種找出循環運行次數的方法。 您可以對generatePrime function 進行以下更改。

void generatePrime(int N){
int counter = 0;
    for(int i=2; i<=N; i++){
        if(isPrime(i)){
            counter++;
            cout<<i<<"--"<<counter<<"  ";
        };
    };
};

通過有一個初始化為 0 的計數器,並且每次循環運行時其值都會增加 1,您可以計算出第 10001 個素數。

此外,您想更改主 function 中的n 您只生成素數直到數字 10001,而不是直到該值的所有數字都是素數。 選擇一個更大的數字,例如 50001 或類似的數字。

添加到@Aditya 答案,您可以稍微改進一下 isPrime isPrime() function

int isPrime(int number){

    if(number < 2) return 0;
    if(number == 2) return 1;
    if(number % 2 == 0) return 0;
    for(int i=3; (i*i)<=number; i+=2){
        if(number % i == 0 ) return 0;
    }
    return 1;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM