java - 质数不显示正确答案

标签 java for-loop boolean

我的代码仅适用于少数数字,但它在大多数数字上完全失败,我不明白为什么。它的目的是返回数字,如果是质数则返回 true,如果不是质数则返回 false。

int first = 6; 
int second = 7;
boolean primeFirst = false;
boolean primeSecond = false;


//first prime checker
for (int x = 2; x< (Math.sqrt(first)); x++)
{
  primeFirst = true; //prime
  if (first% x == 0)
  {
    primeFirst = false; //not prime
  }             
}

//second prime checker
for (int x = 2; x< (Math.sqrt(second)); x++)
{
  primeSecond = true; 
  if (second % x == 0)
  {
    primeSecond = false;                  
  }            
}

System.out.println(first + " is " + primeFirst);
System.out.println(second + " is " + primeSecond);

最佳答案

首先,您正在设置 primeFirst在循环的每次迭代中为 true。您应该仅在循环之前设置它,这样在您找到一个因子后它就不会重置回 true。 primeSecond 相同。这就是为什么 21 成为素数。

其次,您没有检查所有可能的因素,因为您的循环条件是 x< (Math.sqrt(first)) 。这意味着循环将在测试平方根 itelf 之前停止,这就是 9 成为质数的原因。

这是一个可能的固定版本:

boolean primeFirst = true;
double sqrtFirst = Math.sqrt(first);
for (int x = 2; x <= sqrtFirst; ++x) {
    if (first%x==0) {
        primeFirst = false;
        break;
    }
}

关于java - 质数不显示正确答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48385075/

相关文章:

java - JPQL:查询多列时,什么样的对象包含结果列表?

java - 如何使用 Camel jackson 将 JSONArray 转换为对象列表

python - boolean 型年

java - Web 应用程序似乎启动了一个名为 [Timer-0] 的线程,但未能停止它

java - 如何计算mongo中引用集合的不同值

algorithm - 使用 for 循环递增值时计算 n 的值

c - C语言中的for循环语法执行

javascript - 使用 jquery.().each 和 for 循环进行迭代失败

java - 如何将一个类中 boolean 方法的结果获取到Java中另一个类的if语句中?

Python 3 逻辑 not 将 True 返回为 True