【发布时间】:2019-09-18 16:58:14
【问题描述】:
我正在向我大学的测试人员提交代码,我的代码完全适用于我提供的测试用例。
checker抛出Time-Limit Exceeded错误,我在visual studio中测试,和在线judge编译器完全兼容。
#include <iostream>
#include <math.h>
using namespace std;
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int i, n, gd; cin >> n;
gd = 1;
if (n > 1) {
for (i = 2; i < n; i++)
{
if (n % i == 0)
{
gd = i;
}
}
cout << gd;
}
return 0;
}
}
我找不到它为什么会抛出这样的错误。谢谢
代码只能在我的 Visual Studio 中运行,但无法通过测试。检查器顺便隐藏了测试用例。
【问题讨论】:
-
如果代码工作正常,并且您只想提高其性能,请考虑在codereview.stackexchange.com 上询问而不是 SO。 “我找不到它为什么会抛出这样的错误。”通常,如果执行代码的时间更长,那么自动检查系统会显示此错误,即最大允许时间。
-
如果您不被禁止使用标准库,
std::gcd可能会有所帮助。 -
找到最小的除数,然后将
n除以它得到最大的除数。它会明显更快。当你找到第一个除数时,你可以停止循环,或者你到达 sqrt(n)。 -
@interjay 即使是
n,答案也是n/2。 -
@MaximEgorushkin 是的,但不需要特殊情况。在这种情况下,最小的除数是 2,所以最大的除数是 n/2。
标签: c++ arithmetic-expressions