如何在java中考虑非素数0和1?

时间:2012-12-13 05:00:43

标签: java for-loop numbers zero modulus

我不确定这是否是正确的问题,但我一直在寻找解决方案,我希望自己来对地方了。

计算素数时,每个数字必须可被整除的起始数是2是非素数。在我的java程序中,我想要包括0到某个数字范围内的所有非素数,那么如何包含0和1呢?我是否应该为0和1分别设置if和else-if语句,表明它们不是素数?我认为可能0和1应该包含在java for循环中,但我不知道如何去做。

for (int i = 2; i < num; i++){
        if (num % i == 0){
            System.out.println(i + " is not a prime number. ");
        }
        else{
             System.out.println(i + " is a prime number. ");
        }

}

5 个答案:

答案 0 :(得分:2)

您的计划不正确。如果num = 91。然后这个程序打印91是素数5次(2到6)然后它打印它不是素数。

boolean prime =true.
for (int i = 2; i <= Math.sqrt(num); i++){// less than equal to sqrt num is good enough.
        if (num % i == 0){
            prime=false;
            break; // no more checks needed
   }    
}
if (prime && (num>1)){ // to cover case of num=0 and num=1
     System.out.println(i+" is Prime");
}
else{
     System.out.println(i+" is NOT Prime");
}

是的我认为你应该将1和0作为单独案件包括在内。但请注意,1和0既不是素数也不是复合素。所以要考虑到这一点。

答案 1 :(得分:1)

完美的输出打印n Prime no&#39>

double i,j;


    for ( i = 2; i <= num; i++){
        boolean prime =true;
        for(j= 2; j<= Math.sqrt(i); j++)
        {// less than equal to sqrt num is good enough.
            if (i % j == 0){

                prime=false;
                break; // no more checks needed
       }    

        }
            if (prime && (i>1)){ // to cover case of num=0 and num=1
                 System.out.println(i+" is Prime");

            }
            else{
                 System.out.println(i+" is NOT Prime");
    }

    }

答案 2 :(得分:0)

我会直接处理它们,而不是试图让它们适合你的正常流程,因为你知道它们将会是什么。

如果你真的想要它们在你的循环中,你可以这样做:

for (int i = 0; i < num; i++){
    if (i > 1 && num % i == 0){
        System.out.println(i + " is not a prime number. ");
    }
    else{
         System.out.println(i + " is a prime number. ");
    }
}

从零开始,只需添加一个检查,如果你高于1,那么它们就在循环中。

答案 3 :(得分:0)

来自维基百科:

  

素数(或素数)是大于1的自然数   除了1和它本身之外没有正的除数。

也可以在num之前检查,但sqrt(num)

for (int i = 0; i <= (int)Math.sqrt(num); i++){// i=sqrt(num) has to be checked

答案 4 :(得分:0)

要坚持你的基本算法,我会这样做:

boolean maybePrime = num > 1;
int limit = (int) Math.sqrt(num);
for (int i = 2; maybePrime && i < limit; ++i) {
    maybePrime = num % i != 0;
}
if (maybePrime) {
    System.out.println(num+" is a prime number");
} else {
    System.out.println(num+" is not a prime number");
}

然而,这不是很有效。您可能希望使用Sieve of Eratosthenes