HDU 6298(数学)

题意是给出一个数,找出这个数的三个因子且这三个因子的和等于这个数,输出满足条件的乘积最大的一组因子的乘积,如果不存在这样的因子,就输出 -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),第二种情况的结果大于第三种情况,则要优先考虑第二种情况。

代码如下:

          

 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
",ans);
22     }
23     return 0;
24 }
View Code

感谢这篇博客的作者:https://www.cnblogs.com/ZERO-/p/9364600.html

原文地址:https://www.cnblogs.com/Taskr212/p/10419458.html