首页 > 其他 > 详细

HDU 6298(数学)

时间:2019-06-30 21:16:47      阅读:121      评论:0      收藏:0      [点我收藏+]

题意是给出一个数,找出这个数的三个因子且这三个因子的和等于这个数,输出满足条件的乘积最大的一组因子的乘积,如果不存在这样的因子,就输出 -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\n",ans);
22     }
23     return 0;
24 }
View Code

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

HDU 6298(数学)

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!