Java Findind素数-我的代码不起作用

Java Findind素数-我的代码不起作用,java,primes,Java,Primes,我想用这个代码来查找素数: public class Primzahlen { public static void main(String [] args) { for(int i = 1;i<100;i++) { for(int j=1;j<i;j++) { if(i%j == 0) {break;} if(j== (i-1)) {System.out.println(

我想用这个代码来查找素数:

public class Primzahlen {
    public static void main(String [] args) {
        for(int i = 1;i<100;i++) {
            for(int j=1;j<i;j++) {
                if(i%j == 0) {break;}
                if(j== (i-1)) {System.out.println(i);}  
            }           
        }
    }
}
Primzahlen公共类{
公共静态void main(字符串[]args){

对于(int i=1;i您的代码的问题是,
j
从1开始,每个数字满足
i%j
,循环中断,因此
j
应从2开始。我建议此代码更有效,并且在O(sqrt(n))时间内运行:

Primzahlen公共类{
公共静态void main(字符串[]args){

对于(inti=2;i,这里有一些建议

  • 将第一个素数种子设定为2。由于2是唯一的偶数素数,因此允许后续候选数仅为奇数。因此,从3开始,将候选数增加2
  • 只检查候选项的平方根以下的素数
  • 既然你正在寻找素数,就用已经找到的那些作为除数来测试素数。假设候选者是17。素数2,3,5,7,11,13已经找到。通过应用前面的平方根规则,你所需要做的就是看看17是否可以被3或5整除,而不是2到16整除。如果它可以被任何大于其平方的素数整除如果重新根目录,它将已被检测到

要使用完全不同的方法,请检查。

您调试过程序吗?@Stultuske it compiles任何东西
%1
都是零。您可以通过使用调试器来找到这一点。如果代码未编译,调试器将不会帮助您。它可以让您在运行程序时看到发生了什么。@New2Math调试和编译是两种不同的方法调试是在执行时一步一步地检查正在运行的代码,看看发生了什么事情。它不是类似于n*log(n)吗?@NtFreX我指的是一个特定的数字。唯一的问题是它没有显示2是质数
j*j I
是一个更容易打印的条件。@New2Math 99不是质数(99=3*33)
public class Primzahlen {
    public static void main(String [] args) {
        for(int i = 2;i<100;i++) {
            for(int j=2;  j < ((int)Math.sqrt(i))+2  ; j++) {
                if(i%j == 0) {break;}
                if(j== ((int)Math.sqrt(i))+1) {System.out.println(i);}
            }

        }
    }

}