【问题标题】:Checking prime number with a for loop [duplicate]用for循环检查素数[重复]
【发布时间】:2023-03-14 15:40:01
【问题描述】:

需要运行一个从 2 到 - number 的数字迭代的代码,并在 isPrime 方法中给出一个关于输入数字的布尔值。 无论我输入什么,我都会保持“真实”, 7 、 28 等。

// Import statement:
import java.util.ArrayList;
class PrimeDirective {
    // Add your methods here:
    public boolean isPrime(int number) {
        int prime = 0;
        int checkPrime = number % 1;
        
        if (number == 2) {
            return true;
        }
        if (number < 2) {
            return false;
        }
        
        for (int i = 2; i < number; i++) {
            if (number % i == 1) {
                return true;
            } else {
                return false;
            }
        }
    }
    
    public static void main(String[] args) {
        
        PrimeDirective pd = new PrimeDirective();
        int[] numbers = { 6, 29, 28, 33, 11, 100, 101, 43, 89 };
        System.out.println(pd.isPrime(7));
    }
}

【问题讨论】:

  • 旁注:了解正确的 Java 代码缩进。您应该将 { 大括号放在行尾,并且始终使用相同的缩进保持一致。这样的事情很重要。它们使您的代码易于阅读或难以阅读。
  • 另外:请在发布问题之前进行适当的研究。你不可能是第一个在 isPrime() 上提出问题的人。

标签: java


【解决方案1】:

检查一个数字是否不是素数更容易。您的代码如下所示:

for(int i = 2; i < number; i++)    
  if (number % i == 0 && number != i)
      return false;

return true;

【讨论】:

  • 太多不必要的检查。
【解决方案2】:

如果您只检查数字的一半,您可以找到您的结果和优化代码,因为理想情况下我们只需要检查数字的平方根。

public boolean isPrime(int number){
 for(int i=2;i<number/2;i++)
     if(number%i==0)
          return false;
  return true;
}

【讨论】:

  • 如果number = 1 怎么办?您的方法将返回 true 这是错误的,因为 1 不是质数。此外,无需检查到number/2。检查最多 sqrt 的数字 (i&lt;=Math.sqrt(number)) 就足够了。检查en.wikipedia.org/wiki/Primality_test
【解决方案3】:

首先,只需先除以 2 即可。然后,您可以检查是否可以被奇数整除。

public boolean isPrime(int v) {
   if (v == 1 || v%2 == 0) {
       return false;
   }
   // then you just need to check for divisibility up to the
   // square root of the number.
   int max = (int)Math.sqrt(v) + 1;
   for (int i = 3; i <= max; i+=2) {
      if (v % i == 0) {
           return false;
      }
   }
   return true;
}


【讨论】:

  • 我对这里的数学不太清楚,为什么是平方根?
  • 考虑像 19 这样的数字。如果 19 可以被 2 整除得到 q,那么 19 也可以被 q 整除得到 2。如果被 3 整除得到 s 那么也由s 给出3。所以未来的分裂已经被抓住了。一个人可以停止寻找的点是k * k = 19。或平方根上方的下一个数字。 19 就是 5。
  • 另一种看待它的方式是,如果有任何number &gt; sqrt(n) 除以n,那么一定有一个number &lt; sqrt(n) 也除以n。因此,只需要除以 sqrt(n) 之前的数字即可。
猜你喜欢
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2020-10-18
  • 2016-04-01
相关资源
最近更新 更多