【发布时间】:2020-12-19 07:16:37
【问题描述】:
大家好,我在 cpp 中使用 Eratosthenes 筛对给定的无“n”进行质数分解,但它显示错误:
“浮点异常(核心转储)”
代码如下:-
#include <iostream>
using namespace std;
void primeFactor(int n)
{
int arr[100] = {0};
for (int i = 2; i < n; i++)
{
if (arr[i] == 0)
{
for (int k = i * i; k <= n; k = k + i)
{
arr[k] = i;
}
}
}
int primeFactors[n] = {0};
for (int i = 0; n > 1; i++)
{
n = n / arr[n];
primeFactors[i] = arr[n];
}
for (int i = 0; i < n; i++)
{
cout << primeFactors[i];
}
}
int main(int argc, char const *argv[])
{
int n;
cin >> n;
primeFactor(n);
return 0;
}
【问题讨论】:
-
你尝试过什么
n?if (arr[i] == 0)这是一个等待发生的越界访问,以后还会有更多。 -
for (int k = i * i; k <= n; k = k + i)??对于k == n,您也超出了k >= 100的范围。 -
int primeFactors[n]不是有效的 c++,请改用std::vector。您的崩溃可能是由arr[n]之一为零引起的除以零错误 -
int k = i而不是int k = i * i可能会修复崩溃,但我不确定即使使用此修复程序您的算法也能正常工作 -
@dxiv 我试过 8 和 21 。和“这是一个等待发生的越界访问”你能解释一下这行吗