我想計算10001st素數,如問題7 euler project。這是我做了什麼:計算10001st素數
int i=0;
int counter=2;
while (i<=10001){
counter++;
if (Helper.isPrime(counter))
i++;
}
Helper.println(counter);
它返回104033
,但正確答案是104743
。我的問題在哪裏?
我想計算10001st素數,如問題7 euler project。這是我做了什麼:計算10001st素數
int i=0;
int counter=2;
while (i<=10001){
counter++;
if (Helper.isPrime(counter))
i++;
}
Helper.println(counter);
它返回104033
,但正確答案是104743
。我的問題在哪裏?
你您的代碼有三個問題:
counter
初始化爲0或1,而不是2.while (i<=10001)
,您將計數,直至找到10002個素數。既然你也不算數2,那麼你需要經過兩步,你需要去哪裏。環路測試應該是while (i<10001)
。Helper.isPrime
方法顯然識別太多的數字作爲素數。它將需要修復,但由於您沒有發佈代碼,因此無法說明需要修復它。正確版本
int i=0;
int counter=1; // chnage initial value of counter
while (i<10001){ // change terminating condition
counter++;
if (Helper.isPrime(counter))
i++;
}
Helper.println(counter);
解釋/你的版本
首先解決它的較小的子集,假設你要打印第3質數的問題。 根據你的代碼
i=0, counter =3, is 3 prime yes i=1
i=1 counter = 4 is 4 prime No i =1
i=1 counter = 5 is 5 prime Yes i=2
i=2 counter =6 is 6 prime No i=2
i=2 counter =7 is 7 prime yes i=3
i=3 counter =8 is 8 prime no i=3
i=3 counter = 9 is 9 prime no i=3
i=3 counter =10 is 10 prime no i=3
i=3 counter =11 is 11 prime yes i=4
loop terminates
ans: 11
是11第二個質數,沒有
問題:
我不認爲你理解這個問題。 – iamnotmaynard
對不起,但如果我提到的兩個問題得到解決,即計數器從1開始而不是從2開始並且終止條件從i <= 10001變爲i <10001,程序將正常工作。 – coder
嘗試
int find=10001;
int counter =1;
int currentNumber=2;
while (counter <= find){
if(Helper.isPrime(currentNumber)){
counter++;
}
currentNumber++;
}
System.out.println(currentNumber-1);
調試!請學會使用一個。 –
你可以發佈問題嗎?我們並不喜歡追蹤不必要的外部鏈接。你怎麼弄出錯誤? – iamnotmaynard
你確定問題不在於'Helper.isPrime'嗎?發佈代碼 – Joni