我不确定这是否是正确的问题,但我一直在寻找解决方案,我希望自己来对地方了。
计算素数时,每个数字必须可被整除的起始数是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. ");
}
}
答案 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。