hdu6298 Maximum Multiple(数论之不定方程)

题意

1e6组询问,每次给你一个正整数n<=1e6

把n拆成三个能整除n的正整数x,y,z,且x+y+z=n,

输出最大的xyz三数乘积,若不存在则输出-1

思路来源

https://blog.csdn.net/xuanhuangwendao/article/details/81214066

题解

x,y,z只能表示为形如^{\tfrac{n}{a}}的形式,a为大于1的正整数,

不妨x<=y<=z,由z>=(x+y+z)/3则z>=^{\tfrac{n}{3}},即知a<=3,z=\tfrac{n}{3}z=\tfrac{n}{2}

z=\tfrac{n}{3},则x+y=\tfrac{2n}{3},由y>=(x+y)/2则y>=^{\tfrac{n}{3}},由y<=z知y=^{\tfrac{n}{3}},有x=^{\tfrac{n}{3}}

z=\tfrac{n}{2},则x+y=\tfrac{n}{2},则y>=(x+y)/2则y>=^{\tfrac{n}{4}}

由y<=z且y+z<n知^{\tfrac{n}{4}}<=y<^{\tfrac{n}{2}},a只能取4或3

(1)y=^{\tfrac{n}{4}},则x=^{\tfrac{n}{4}}

(2)y=^{\tfrac{n}{3}},则x=^{\tfrac{n}{6}}

即(x,y,z)解为(\tfrac{n}{3},\tfrac{n}{3},\tfrac{n}{3})(\tfrac{n}{4},\tfrac{n}{4},\tfrac{n}{2})(\tfrac{n}{6},\tfrac{n}{3},\tfrac{n}{2})

前提分别是n为3的倍数,4的倍数,6的倍数,

且有均值不等式,注意到三者越接近,乘积越大

则三者同时成立时,①>②(1)>②(2),

看一下乘起来的分母就能看出来

心得

暑假当时做的时候不会

现在当寒假作业被fls出出来了QAQ

觉得自己数论还是太菜了吖

就是一个分类讨论嘛emmm

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int t;
ll n,ans;
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%lld",&n);
		ans=-1;
		//if(n%6==0)ans=n/2*n/3*n/6; 注意到mod 6==0一定mod 3==0
		if(n%4==0)ans=n/2*n/4*n/4;
		if(n%3==0)ans=n/3*n/3*n/3;
		printf("%lld\n",ans); 
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code92007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值