使用嵌套循环查找1到100之间的素数

时间:2016-12-11 22:42:16

标签: java

我试图使用嵌套的循环找到1到100之间的素数,但我得到了奇怪的结果。

我认为我的代码存在问题,但我无法弄清楚究竟在哪里,有人可以帮助我吗?

我做的第一个循环将数字从2到100(i) 第二个将从2到i-1(j)的数字计数 所以,当你划分i%j!= 0时,它应该给你Prime数字我是对的吗? 非常感谢你的帮助

public static void main (String []args){

        for(int i = 2; i<=100 ; i++)
        {
            for(int j = 2 ; j  < i-1 ; j++ )
            {
              if (i%j != 0)
              {
                  System.out.println(i  );      
              }
            }
        }           
}

3 个答案:

答案 0 :(得分:0)

  

所以当你划分i%j!= 0时,它应该给你Prime数字我是对的吗?

没有。只有当所有j的条件成立时,该数字才是素数。

答案 1 :(得分:0)

问题是这个

  if (i%j != 0){
                System.out.println(i  );  
                                    }

                }

你要说的是,对于j的每个值,测试,i和if模数余数是*不是0,打印。但是,在确定候选(i)是素数之前,必须检查循环中j的所有迭代。 *在结束素数之前必须检查的所有j值。

设置布尔标志为false(非素数),如果(i%j!= 0)则将标志更新为true,否则为false  然后在你的嵌套for之后,打印一个带有标志的if

答案 2 :(得分:0)

此测试是否素数:

if (i%j == 0)

在这种情况下,中止进一步测试并尝试下一个数字,这可以通过几种方式实现,但对代码的最小更改是:

outer:
for (int i = 2; i<=100 ; i++) {
    for (int j = 2 ; j < i-1 ; j++ ) {
        if (i%j == 0) {
            continue outer;
        }
    }
    System.out.println(i);      
}

代码outer:标签(它可以是任何名称,例如foo:),而continue outer;表示开始循环的下一次迭代那个标签。