Java 素数算法不起作用

Java 素数算法不起作用,java,loops,primes,Java,Loops,Primes,然后停下来。我试过调试,但没能找出问题所在。 我没有为for循环设置条件,因为我有一个break语句,如果素数计数器达到10001,它将中断循环 PS:我知道我可以使用isPrime(),但我只想练习这类算法。在循环时,不要在内部检查变量。修改为: 0 1 2 2 while(check在while循环中,您不会增加check。现在,每次增加2(除了2之外,扫描偶数没有意义)。还有更快的方法,但现在就可以了 另外,你只需要运行到prime的平方根,而不是一半。这样会加快速度。啊!兄弟,你来了。

然后停下来。我试过调试,但没能找出问题所在。 我没有为for循环设置条件,因为我有一个break语句,如果素数计数器达到10001,它将中断循环


PS:我知道我可以使用isPrime(),但我只想练习这类算法。

循环时,不要在
内部检查
变量。修改为:

0
1
2
2

while(check在
while
循环中,您不会增加
check
。现在,每次增加2(除了2之外,扫描偶数没有意义)。还有更快的方法,但现在就可以了


另外,你只需要运行到
prime
的平方根,而不是一半。这样会加快速度。

啊!兄弟,你来了。谢谢。我太傻了。顺便说一句,我使用的算法需要花费大量时间(比如20秒)才能完成。是
isPrime()
效率更高?@SiddharthVenu我建议你向自己证明,你可以在调试器中看到这个问题(现在你知道它在做什么了)@SiddharthVenu:有很多方法可以改进它。首先你可以在开始时测试2,然后只检查奇数(所以“check+=2)。其次你可以计算sqrt(prime)在开始时,然后仅循环直到平方根(as(sqrt(x)+1)^ 2将总是高于素数。第三,你可以考虑完全不同的算法,记住已经测试过的素数并只通过它们。考虑把这个评论推广到你的答案,特别是你的最后一点。然后我会赞成。我建议你学习如何用简单的bug调试简单的程序。这是一个。如果你不这样做,你会发现调试更难的程序很困难。一旦你开始调试多线程应用程序,这有时似乎是不可能的。顺便说一句,你只需要循环到sqrt(n),跳过偶数之后,你只需要检查奇数,即(int check=3,max=(int)Math.sqrt(prime);i
这会快得多。是的,我明白。我现在就试试。谢谢
0
1
2
2
    while(check<=prime/2){
        if(prime%check==0){
            flag=1;
            break;
        }
        ++check;
    }