我想计算问题7 euler project中的第10001个素数。这就是我所做的:
int i=0;
int counter=2;
while (i<=10001){
counter++;
if (Helper.isPrime(counter))
i++;
}
Helper.println(counter);
它正在返回104033
,但正确的答案是104743
。我的问题在哪里?
答案 0 :(得分:7)
您的代码有三个问题:
counter
初始化为0或1,而不是2。while (i<=10001)
,您可以计算直到找到10002个素数。因为你也不算2,所以你需要走两步。循环测试应为while (i<10001)
。Helper.isPrime
方法显然会将太多数字识别为素数。它需要修复,但由于你还没有发布它的代码,所以不可能说出需要修复它的内容。答案 1 :(得分:1)
正确的版本
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 2nd prime,No
问题:
答案 2 :(得分:-1)
试
int find=10001;
int counter =1;
int currentNumber=2;
while (counter <= find){
if(Helper.isPrime(currentNumber)){
counter++;
}
currentNumber++;
}
System.out.println(currentNumber-1);