其实有一种很简单的方法。。。
我们可以直接枚举答案。。。
主要是判断,具体看代码注释
因为做法是在是过于简单,故代码中的注释可能不会很多。
但是因为做法简单,所以大家应该都能看懂(不要说我说明过少。。。
时间复杂度:
using namespace std;
int ans;
int T, n;
signed main() {
for (read(T); T; --T) {
read(n);
if (n <= 5) { // 特判-1
write(io_l, -1);
continue;
}
int res = 0;
for (int i = 2; i * i <= n; ++i) { // 枚举每一个约数
if (n % i == 0) {
if (n / i >= 6) res = max(res, i); // 因为我们需要将n分为3份,所以n/i应该>=6
if (n / (n / i) >= 6) res = max(res, n / i);
}
}
write(io_l, res ? res : 1);
}
return 0;
}