我必须找到第10001个素数,即104753但是当我运行我的代码时,我得到104754。
我需要帮助找到问题。我能改变什么才能找到第10001个素数? 感谢
这是我到目前为止所做的:
public class Prime
{
public static void main(String[] args)
{
int a = 1;
int primes = 0;
while (primes < 10001)
{
if (isPrime(a) == true)
{
primes++;
}
a++;
}
System.out.println("The 10001st prime number is " + a);
}
public static boolean isPrime(int b)
{
boolean x = false;
int counter = 0;
for (int i=1; i<=b; i++)
{
if (b%i == 0)
{
counter++;
}
if (counter == 2 && i == b)
{
x = true;
}
}
return x;
}
}
答案 0 :(得分:4)
找到号码后,你就增加它。
if(isPrime(a) == true)
{
primes++;
}
a++;
你应该在递增之前打印它。
答案 1 :(得分:2)
你增加&#39; a&#39;在确定它是否是素数之后。
如果这是我的项目,我会从:
开始a = 0;
然后在我的循环中我会:
a++;
if (isPrime(a)) {
count++;
}
答案 2 :(得分:2)
一个简单的解决方案:
int a = 0;
int primes = 0;
while(primes < 10001) {
a++;
if(isPrime(a) == true) {
primes++;
}
}
当然还有很多其他的。 也许您还应该考虑更快的算法来找到素数:
http://www.wikihow.com/Check-if-a-Number-Is-Prime
首先,请确保在isPrime
测试方法中提前退出:如果您在计数器高于2的循环中到达某个点,则可以退出。然后,你真的不需要测试i = 0.
答案 3 :(得分:1)
在a++
时,在while循环中完成了额外的prime == 10001
。
while (primes < 10001) {
if (isPrime(a)) {
primes++;
}
a++;
}
您可以使用--a
打印所需的素数。
System.out.println("The 10001st prime number is " + (--a));