Given an integer nn, Chiaki would like to find three positive integers xx, yy and zzsuch that: n=x+y+zn=x+y+z, x∣nx∣n, y∣ny∣n, z∣nz∣n and xyzxyz is maximum.
````
Input
```cpp There are multiple test cases. The first line of input contains an integer TT (1≤T≤1061≤T≤106), indicating the number of test cases. For each test case: The first line contains an integer nn (1≤n≤1061≤n≤106). ````
**Output**
```cpp For each test case, output an integer denoting the maximum xyzxyz. If there no such integers, output −1−1 instead.
Sample Input
1 2 3 4
3 1 2 3
Sample Output
1 2 3
-1 -1 1
只有因子中有 4 或者有 3 才能被拆成 X+Y+Z=N,然后打了表验证。 最后 wa 了好几次,是因为 int 和 int 计算之后还是 int 就算赋值给 long long . 打表代码
#include<bits/stdc++.h> usingnamespace std; intmain() { int T; scanf("%d", &T); while (T--) { int n; for (int n = 1; n <= 100; n++) { int maxt = -1; int a, b, c; for (int x = 1; x <= n; x++) { for (int y = 1; y <= n - x; y++) { int z = n - x - y; if (z && n % x == 0 && n % y == 0 && n % z == 0) { if (maxt < x * y * z) { a = x; b = y; c = z; } maxt = max(maxt, x * y * z); } } } printf("%d:%5d %d %d %d\n", n, maxt, a, b, c); if (n % 12 == 0) printf("\n"); } } return0; }
#include<bits/stdc++.h> usingnamespace std; intmain() { int T; longlong n,x,y,z; longlong sum; scanf("%d", &T); while (T--) { scanf("%lld", &n); if ((n % 3) == 0) { x = y = z = n / 3; sum = x * y * z; if (x + y + z == n) printf("%lld\n", sum); else puts("-1"); } elseif ((n % 4) == 0) { x = y = n / 4, z = n / 2; sum = x * y * z; if (x + y + z == n) printf("%lld\n", sum); else puts("-1"); } else puts("-1"); } }