【问题标题】:Why use sqrt(n) for this?为什么要为此使用 sqrt(n)?
【发布时间】:2022-12-04 21:14:30
【问题描述】:

为什么我们在这段代码中使用了 sqrt(n)。它是用于寻找 n 的质因数的代码。我尝试通过将 sqrt(n) 替换为 n 来运行我的代码,它运行良好,那么我们为什么需要它呢?

#include <bits/stdc++.h>
using namespace std;

void primeFactors(int n)
{
    while (n % 2 == 0) {
        cout << 2;
        n = n / 2;
    }
    for (int i = 3; i <= sqrt(n); i = i + 2) {
        while (n % i == 0) {
            cout << i;
            n = n / i;
        }
    }
    if (n > 2)
        cout << n;
}
int main()
{
    int n = 81;
    primeFactors(n);
    return 0;
}


【问题讨论】:

  • 有多少个 n 的质因数大于 sqrt(n)?
  • 因为 sqrt(n) 略小于 n,检查到 sqrt(n) 就足够了(如果 \forall x &lt; sqrt(N) N mod x != 0,那么同样适用于 \forall x &lt; N - 证明这一点!然后你就可以理解为什么所有因素都大于它sqrt(n) 与其他东西配对)。并且您通常应该尽可能减少计算量。

标签: c++ c loops nested program-entry-point


【解决方案1】:

因为 sqrt(n) 足以覆盖所有 potential divider,所以为什么要使用 n?它会不必要地延长运行时间。

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 2022-08-03
    • 2016-04-23
    • 2014-02-18
    • 2011-07-04
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多