java查找10001:st素数(Euler项目)
我正在做Euler项目的挑战7,它要求我找到10001:st素数
我的尝试如下:
int i=2; //the number to check if prime
int c=0; //the amount of prime numbers
while(true){
//checks if i%n == 0, if so, i is not a prime number.
for(int n=2;n<=prob.getMax(i);n++){
//it is not a prime number
if(i%n==0){
break;
}
//it is a prime number
if(n==prob.getMax(i)){
c++;
break;
}
}
i++;
//if c == 10001 we have found the 10001:st prime number
if(c==10001){
System.out.println(i);
break;
}
}
}
public int getMax(int x){
return (int) Math.ceil(Math.sqrt(x));
}
返回的值为104760,但这似乎不正确。我无法理解我做错了什么,因为我似乎得到了一个合理的价值。谁能给我指一下正确的方向吗
还有:有没有更好的方法来计算这类问题?我似乎在使用for循环和brute强制方法来解决每个问题
# 1 楼答案
在代码中,您没有检查for循环中的
prob.getMax(i)
。 在for
循环的主体中添加另一个检查,如下所示:# 2 楼答案
在检查找到的素数是否为第10001个素数之前,先增加i。通过交换这些操作的顺序,它应该可以工作
# 3 楼答案
在显示结果之前,您正在增加
i
(使用i++
)。100001素数可能为104760-1一个建议是,尽量避免这些(正确的)。您可以执行以下操作:
# 4 楼答案
素数需要注意的一点是,除了数字2之外,它们都是奇数,你不必检查这个数字是否可以被它前面的每个数字整除
结果(!!!!扰流板警报!!!!!)
# 5 楼答案
通过搜索,您可以发现10001素数是104743。 我将您的算法更改为: