【发布时间】: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 < sqrt(N) N mod x != 0,那么同样适用于\forall x < N- 证明这一点!然后你就可以理解为什么所有因素都大于它sqrt(n)与其他东西配对)。并且您通常应该尽可能减少计算量。
标签: c++ c loops nested program-entry-point