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个素数,但它只是不起作用。构建成功但它没有显示任何东西请帮助。提前谢谢....
答案 0 :(得分:2)
目前还不清楚你正在尝试做什么,所以我必须根据代码进行猜测。我假设您希望找到第10001个素数。
首先,您忘记在循环结束时将isprime
设置为true。就像现在一样,它在第一次迭代后永久是假的,这意味着3是唯一检测到的素数,并且在此之后你将一直循环到2 ^ 63(实际上是无限的)并最终返回0。 / p>
您可以通过将boolean isprime = true;
移动到循环的开头来解决问题并更好地调整变量范围。您也可以将prime
移动到循环中,然后将if c==10001
位更改为直接返回。
其次,c = c++;
并不正确。您正在递增变量,然后将其重置为旧值。您应该c++;
或c = c + 1
。