题意是给出一个数,找出这个数的三个因子且这三个因子的和等于这个数,输出满足条件的乘积最大的一组因子的乘积,如果不存在这样的因子,就输出 -1.
第一次 wa 了,因为把题目中的 x | n 当做了位或操作(其实这样那句话读不通...),其实是整除的意思。
分析:因为 n = n * 1
= n * (1/2 + 1/3 + 1/6) = n * (1/3 + 1/3 + 1/3) = n * (1/2 + 1/4 + 1/4)
所以若一个数可以被 2、3 整除
或可以被 3 整除
或可以被 4 整除
则所要求的一组因子是存在的。
而 2 和 3 这种情况包含在第二种情况中,那么只要这个数可以被 3 或 4 整除,所要求的一组因子就是存在的。
又因为第二种情况下三个因子的乘积为 1/27 * (n^3),第三种情况下三个因子的乘积为 1/32 * (n^3),第二种情况的结果大于第三种情况,则要优先考虑第二种情况。
代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 long long n,ans; 4 int main() 5 { 6 int t; 7 scanf("%d",&t); 8 while(t--) 9 { 10 scanf("%lld",&n); 11 ans = -1; 12 if(n%3==0) 13 { 14 n = n/3; 15 ans = n*n*n; 16 } 17 else if(n%4==0) 18 { 19 ans = n/4*n/4*n/2; 20 } 21 printf("%lld\n",ans); 22 } 23 return 0; 24 }