-3

我不确定这是否是问这个问题的正确地方,但我一直在自己寻找解决方案已经有一段时间了,所以希望我来对地方了。

在计算素数时,每个数必须被 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. ");
        }

}
4

5 回答 5

2

你的程序不正确。如果数字 = 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 既不是质数也不是合数。所以考虑到这一点。

于 2012-12-13T05:06:29.347 回答
1

打印 n Prime no 的完美输出

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");
    }

    }
于 2012-12-13T08:35:48.863 回答
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,只需添加一个检查,这样它们就在循环中。

于 2012-12-13T05:05:17.707 回答
0

来自维基百科:

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

也足以检查 not until num,但是sqrt(num)

for (int i = 0; i <= (int)Math.sqrt(num); i++){// i=sqrt(num) has to be checked
于 2012-12-13T05:08:24.250 回答
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");
}

但是,这不是很有效。您可能想考虑使用埃拉托色尼筛

于 2012-12-13T05:11:29.763 回答