Maximum Multiple HDU6298 2018多校第一场

Maximum Multiple

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 21    Accepted Submission(s): 10


 

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).

 

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

 

Source

2018 Multi-University Training Contest 1

/// x|n n是x的倍数

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		long long n;
		scanf("%d", &n);

		if (n % 3 == 0)  /// 三个数接近时乘积较大
		{
			long long t = n / 3;
			printf("%lld\n", t * t * t);
			continue;
		}
		if (n % 2 == 0) /// 不能被3整除 满足条件的xyz中必有一个 n / 2
		{
			/// y + z = n / 2
			/// y、z = 1 / ?
			/// y = z = n / 4   ||   y = n / 3, z = n / 6
                        if (n % 4 == 0)
			{
				long long t = n / 4;
				printf("%lld\n", n / 2 * t * t);
				continue;
			}
		}
		printf("%d\n", -1);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ummmmm/article/details/81172224