[英]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.