【问题标题】:Two ways of searching for a prime寻找素数的两种方法
【发布时间】:2017-08-15 20:20:03
【问题描述】:

我明白为什么你只需要在下面的代码中循环i*i <= n:

public static boolean checkPrime1(int n){
    for(int i = 2; i*i <= n; i++){
        if(n%i==0)return false;
    } return true;
}

因为其中一个因子应该小于 n 的平方根。

但我最近在看书,类似方法中循环的条件或守卫是i &lt;= n/i

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

我知道这对这里的大多数人来说可能很明显,但是谁能简化第二个条件的工作原理?我看不出它如何等同于 n 的平方根。会很感激的

【问题讨论】:

  • 如果 i*i
  • 这是一道数学题,不是代码一,投票结束
  • 除法运算比乘法运算慢,所以第一个代码更快。

标签: java algorithm math primes


【解决方案1】:

i*i &lt;= n 与i &lt;= n/i 完全相同。 算一算吧。

如果i 为正数(在这种情况下始终为正数),您可以将条件与i 相乘或相除,运算符 (&lt;=) 将保持不变。

【讨论】:

  • 我真的不知道为什么我没有那样看。谢谢
【解决方案2】:

两者完全相同。将其视为数学运算。如果i=n/i 则i*i=n。同样,这里i*i &lt;= n 和i &lt;= n/i 都会给出相同的结果。

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多