1. 程式人生 > >【數學 && 思維】hdu-6298 Maximum Multiple

【數學 && 思維】hdu-6298 Maximum Multiple

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; }