HDU 6298
Posted stul
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 6298相关的知识,希望对你有一定的参考价值。
Problem Description
Given an integer n, Chiaki would like to find three positive integers x, y and z such that: n=x+y+z, x∣n, y∣n, z∣n and xyz is maximum.
Input
There are multiple test cases. The first line of input contains an integer T (1≤T≤106), indicating the number of test cases. For each test case:
The first line contains an integer n (1≤n≤106).
The first line contains an integer n (1≤n≤106).
Output
For each test case, output an integer denoting the maximum xyz. If there no such integers, output ?1 instead.
Sample Input
3
1
2
3
Sample Output
-1
-1
1
题目意思:给你n个数,要你找出X,Y,Z, X+Y+Z = n,并且 X,Y, Z 是 n 的一个因子(我当时不认识“ | ”这个符号,想了半天), 输出X * Y * Z 的最大值。
题解:X + Y + Z = n 两边同时除以n, 得到 x/n + y/n + z/n = 1,分别设为 a,b,c; 1/3 + 1/3 +1/3 = 1 1/2 + 1/3+ 1/6 1/2 + 1/4 + 1/4 = 1。另外套for循环 打表发现 必须是3 和 4的倍数才符合题意。 所以就是 1 3 两种情况满足题意。
1 #include <iostream> 2 using namespace std; 3 typedef long long ll; 4 5 int main(){ 6 int T; 7 scanf("%d",&T); 8 while(T--){ 9 ll n; 10 ll max = 0; 11 scanf("%lld",&n); 12 if(n%3 == 0){ 13 max = n*n*n/27;cout<<max<<endl; 14 } 15 16 else if(n%4 == 0){ 17 max = n*n*n/32;cout<<max<<endl; 18 } 19 20 else 21 cout<<"-1"<<endl; 22 23 } 24 return 0; 25 }
以上是关于HDU 6298的主要内容,如果未能解决你的问题,请参考以下文章
hdu 6298 Maximum Multiple (简单数论)
HDU6298 Maximum Multiple (多校第一场1001)