public static boolean isPrime(int number)
{
boolean result = true;
if (number == 0)
{
result = false;
}
for (int i=2; i < number/2; i++)
{
if (number % i == 0)
{
result = false;
}
}
return result;
}
任何想法为什么当int number = 4时,结果返回true?我该怎么做才能解决这个问题?我对我的代码感到满意,但为什么4返回为真呢?
答案 0 :(得分:3)
for (int i=2; i < number/2; i++)
如果您在此输入4
,它将永远不会进入循环,因为
2 < 4 / 2
永远不等于true
(2不小于2)。
相反,请使用<=
。
答案 1 :(得分:2)
如何做到这个方法的有效方法是: (对不起重复,但过了一段时间后,有人可以找到这个主题而不是之前的主题)
public static boolean isPrime(int number) {
//Everything less or equal 1 is not prime number
if (number <= 1) {
return false;
}
//2 is very special case, so I check it separately
if (number == 2) {
return true;
}
//This will help me rid off all even numbers
if (number % 2 == 0) {
return false;
}
//It is important to count the sqrt before using it in for-loop condition.
//If you use it in for-loop condition, it will be counted every single iteration.
int square = (int) Math.sqrt(number);
//I already checked %2, so now I need to check only odd numbers
for (int i = 3; i <= square; i += 2) {
if (number % i == 0) {
//If I find one number, I do not have to continue
return false;
}
}
return true;
}
答案 2 :(得分:1)
for
时,number = 4
循环永远不会执行。这是因为:
for (int i=2; i < number/2; i++)
在i == 2
和i < 2
时执行。如果number == 4
,则永远不会发生这种情况,因为它会i < 4 / 2
i < 2
。要解决此问题,请删除/2
或执行其他操作...不太确定您的目标是什么。
答案 3 :(得分:1)
当number == 4时,第一个if
的布尔条件为false,for
条件的第一次评估也为false。因此,结果是您用于初始化结果的值(true)。
答案 4 :(得分:1)
此外,您可能希望返回结果而不是将其存储在变量中,因为代码将在第一个条件之后继续执行...所以这是工作解决方案:
public static boolean isPrime(int number) {
if (number <= 1) { /* Since 1 isn't technically a prime number */
return false;
}
for (int i=2; i <= number/2; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
答案 5 :(得分:0)
更好更快的代码版本:
public static boolean isPrime(int number) {
if (number <= 1) {
return false;
}
for (int i=2; i*i <= number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
答案 6 :(得分:0)
另一种解决方案:
public static boolean isPrime(int number) {
if (number < 2) {
return false;
}
for (int i=2; i <= (int)Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}