-3
public static long sum7()
{
    int c = 1;
    boolean isprime = true;
    long prime = 0;
    for (long i = 3; i <= Long.MAX_VALUE; i++)
    {
        for (long j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                isprime = false;
                break;
            }
        }
        if (isprime == true)
        {
            c++;
        }
        if (c == 10001)
        {
            prime = i;
            break;
        }
    }
    return prime;
}
static Scanner scanner1 = new Scanner(System.in);

public static void main(String[] args)
{
    System.out.println(sum7());
}

我正在为项目欧拉问题(Q7)尝试以下代码,我应该找到第 10001 个素数,但它只是不起作用。构建成功,但没有显示任何内容请帮助。提前致谢....

4

1 回答 1

2

目前尚不清楚您要做什么,因此我必须根据代码进行猜测。我假设您希望找到第 10001 个素数。

首先,您忘记isprime在循环结束时设置回 true 。就像现在一样,在第一次迭代后它将永久为假,这意味着 3 是唯一检测到的素数,之后您将一直循环到 2^63(实际上是无限的)并最终返回 0。

boolean isprime = true;您可以通过移动到循环的开头来解决问题并更好地确定变量的范围。您还不如prime在循环中进入循环并将if c==10001位更改为直接返回。

其次,c = c++;不正确。您正在递增变量,然后将其重置为旧值。你应该做c++;c = c + 1

于 2012-10-23T05:02:28.780 回答