【发布时间】:2018-06-15 20:26:10
【问题描述】:
问题说明:
13195 的质因数是 5、7、13 和 29。
600851475143 的最大质因数是多少?
这是我在 C++ 中的尝试
#include <bits/stdc++.h>
using namespace std;
void ProblemThree(long long int n) {
bool prime[n];
memset(prime, true, sizeof(prime));
for (int i = 2; i * i < n; i++) {
if (prime[i]) {
if (n % i == 0) {
printf("d", i);
for (int k = 2 * i; k <= n; k += i) {
prime[k] = false;
}
}
}
}
}
int main() {
ProblemThree(600851475143);
}
程序意外崩溃,编译器未显示任何错误。为什么会这样?我该如何阻止它发生?
【问题讨论】:
-
bool prime[n];将是一个“可变长度数组”。 VLA不是标准的 C++ 特性(尽管有些编译器很遗憾地接受它们作为扩展 - 使用 gcc,将-Wvla -Werror添加到编译器命令行以确保您不会意外使用它们)。如果您想要 C++ 中的动态数组,请使用std::vector。 -
#include <bits/stdc++.h>也不是标准 C++。 -
和
using namespace std;- 虽然合法,但只是一个真的坏习惯。 -
当我们这样做的时候,
printf("d", i);是完全错误的。
标签: c++