所以我在嘗試項目歐拉的問題7。輸出錯誤項目歐拉7
通過列出前6個素數:2,3,5,7,11和13,我們可以看到第6個素數是13. 什麼是第10001個素數?
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int a){
if (a==2||a==3){
return true;
}
if (a%2==0){
return false;
}
bool prime=true;
for (int b=2;b<sqrt(a);b++){
if (a%b==0)
prime=false;
}
if (prime==true)
return true;
else
return false;
}
int main(){
int infinite=0;
long long int primecounter=0;
for (int c=2;infinite==0;c++){
if (isPrime(c)==true){
primecounter++;
//cout<<c<<endl;
if (primecounter==10001)
{cout<<c;
break;}
}
}
return 0;}
這就是我到目前爲止所提出的。它適用於我測試的少數數字,如第六個素數等。但是,當我運行10001素數時,它會給我104021,答案是錯誤的。有人能告訴我我的代碼有什麼問題嗎?
效率說明:您可以從'3'開始'b'並使用'b + = 2'。更好的是,如果你將前面的素數保存在內存中,只需要在這些素數上得到'%',而不是所有數字。 – Shahbaz 2012-04-02 12:21:22
你也不必在爲'中間狀態(INT C = 2;無限== 0; C++)' - 如果你等於永遠終止你可以讓它空'的for(int C = 2 ;; C++) '。 – Rup 2012-04-02 12:23:15
備註:你可以寫'return prime;'!另外,不是'無限== 0',你可以寫'true'(甚至不寫),並且完全刪除無限。此外,'if(isPrime(c))'完全有效。 – Shahbaz 2012-04-02 12:23:49