我的代码仅适用于少数几个数字,但对于大多数数字却完全失败,我不知道为什么。它的意思是返回数字,如果是素数则返回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;
    }
}

08-27 09:47