【數學 && 思維】hdu-6298 Maximum Multiple
阿新 • • 發佈:2019-02-04
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;
}