HDU 6298 Maximum Multiple

本文解析了HDU 6298 MaximumMultiple问题,介绍了如何寻找三个整数x、y、z,使它们分别整除给定数n且乘积最大。讨论了两种可能的情况,并提供了简洁的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
A:Maximum Multiple
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6298
题意:给出一个n 找出三个数 x y z 
满足的条件 x|n ,y|n ,z|n 且满足x*y*z 最大;

由于 x+y+z=n;
-------->x/n+y/n+z/n=1
由于窝们要使得x*y*z最大 因此不妨先设
a=x/n,b=y/n,c=z/n;--->a+b+c=1;
换句话来说就是就是将上述式子化简为1/(n/x)+1/(n/y)+1/(n/z)=1;
也就是说分子为1的  满足条件的a b c 三元组;
一共两种情况  (1/2,1/4,1/4) (1/3,1/3,1/3)

****tricks****
如果一个数(eg : 12 )同时满足上面的条件(整除4 或 3 )  则应当需满足x*y*z最大 

*/

#include<bits/stdc++.h>
#define ll unsigned long long 
using namespace std;
int main (){
    ll t;scanf("%I64d",&t);
    while(t--){
        ll n;scanf("%I64d",&n);
        if(n%3==0) printf("%I64d\n",(n/3)*(n/3)*(n/3));
        else if(n%4==0) printf("%I64d\n",(n/2)*(n/4)*(n/4));
        else puts("-1");
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值