因為 x|n ,y|n ,z|n 我們假設存在 n%a=n%b=n%c=0
使得x=n/a , y=n/b , z=n/c 并且n/a + n/b + n/c = n
因為x,y,z的取值是無序的,是以我們可以設a<=b<=c,即x>=y>=z
我們枚舉 a 的所有取值情況:
a=2 (a最小為2),是以 n/b+n/c=n/2 ,得到 2b+2c=b*c ,這裡的解隻有兩個 (3,6)和(4,4)
a=3 (a最大為3),因為 a<=b<=c , 這裡隻有 b=c=3 ,不然 n/a + n/b + n/c!=n
是以有三種情況:
a=2,b=3,c=6
a=2,b=4,c=4
a=3,b=3,c=3
但是我們還要xyz最大,即nnn/(abc)最大,是以我們要把 a=2,b=3,c=6 這種情況變成a=3,b=3,c=3 ,因為 n%2=n%3=n%6=0 ,是以 n/2=n/3+n/6 ,是以 x-n/6,y,z+n/6,即 a=3,b=3,c=3,這樣的xyz才最大,因為333<236
是以我們就隻有兩種情況了:
a=2,b=4,c=4
a=3,b=3,c=3
#include<cstdio>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
if(n%3==0){
printf("%lld\n",(long long)n*n*n/27);
}
else if(n%4==0){
printf("%lld\n",(long long )n*n*n/32);
}
else printf("-1\n");
}
}