Maximum Multiple
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1528 Accepted Submission(s): 666
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
题意:给定一个正整数n,问是否存在三个数字x,y,z,满足n是x,y,z的倍数且x + y + z = n,若存在输出最大的x*y*z,否则输出-1
题解n = x + y + z,即 1 = x/n + y/n + z/n,因为n是x,y,z的倍数,所以 1 = 1 / a + 1 / b + 1 / c,可以得到整数解只有三组,分别是3,3,3、2, 2, 4 、 2,3,6,当是3的倍数时,3,3,3,最大,当不是3的倍数是4的倍数时,2,2,4最大
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
#include <cmath>
#define ll long long
using namespace std;
ll ans1[1000010];
int main(){
int t;
while(scanf("%d", &t) != EOF){
while(t--){
int n;
scanf("%d", &n);
ll ans;
if(n % 3 == 0){
ans = (ll)(n/3) * (n / 3) * (n / 3);
}
else if(n % 4 == 0){
ans = (ll)(n / 4) * (ll)(n / 4) * (ll)(n / 2);
}
else
ans = -1;
printf("%lld\n", ans);
}
}
}