小错误10001st素数java代码?

时间:2013-11-15 14:55:30

标签: java counter primes

我必须找到第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;
    }
}

4 个答案:

答案 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));