Step1 Problem:
n = x + y + z, 满足条件 x | n, y | n, z | n, 的情况下求最大的 x*y*z。
Step2 Ideas:
唯一分解定理 n = a1^p1 * a2 ^ p2 * ….. * an^pn.
假设 n = t * r = (a + b + c) * r,(a*r) | n, (b*r) | n, (c*r) | n(让 r 尽可能的大)。
要想满足上述条件 a, b, c 必须是 t 的质因数(1 也可以)。
如果 t 是质因数的情况下:显然只有 t = 3 满足条件(t = 1+1+1)。
如果 t 不是质因数的情况下:t = 4 能满足条件,t = 1 + 1 + 2。
让 r 尽可能的大,所以 3 | n, 4 | n 的时候有结果。
Step3 Code:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
if(n%3 == 0) {
printf("%lld\n", 1LL*(n/3)*(n/3)*(n/3));
}
else if(n%4 == 0) {
printf("%lld\n", 1LL*(n/4)*(n/4)*(n/2));
}
else printf("-1\n");
}
return 0;
}