首页 > 其他 > 详细

PERFECT NUMBER PROBLEM(思维)

时间:2019-04-20 22:24:32      阅读:129      评论:0      收藏:0      [点我收藏+]

 题目链接:https://nanti.jisuanke.com/t/38220

题目大意:这道题让我们判断给定数字是否为完美数字,并给来完美数字的定义,就是一个整数等于除其自身之外的所有的因子之和。

首先打表前三个,发现满足 n = 1+2^1 + 2^2 + 2^3 + 2^z + (n/(2^1))+(n/(2^2))+...+n/(2^z).

然后化简这个式子,就是n=2^z*(2^z-1)。然后枚举z就可以了,看看有没有满足的。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 # define ll long long
 4 # define inf 0x3f3f3f3f
 5 const int maxn =2e5+100;
 6 const int mod = 1e9+7;
 7 ll qsm(ll t1,ll t2)
 8 {
 9     ll ans=1ll;
10     while(t2)
11     {
12         if(t2&1)
13             ans=ans*t1;
14         t1*=t1;
15         t2>>=1;
16     }
17     return  ans;
18 }
19 ll cal(ll t1)
20 {
21     ll ans=qsm(2,t1);
22     return ans*(ans*2-1);
23 }
24 bool judge(ll t)
25 {
26     ll tmp=cal(t);
27     ll sum=0;
28     for(int i=2; i<=(int)sqrt(tmp); i++)
29     {
30         if(tmp%i==0)
31         {
32             sum+=i;
33             sum+=tmp/i;
34         }
35     }
36     sum++;
37     return sum==tmp;
38 }
39 int main()
40 {
41     for(ll i=1; i<=20; i++)
42     {
43         if(judge(i))
44         {
45             cout<<i<<" "<<cal(i)<<endl;
46         }
47     }
48     return 0;
49 }

 

  

PERFECT NUMBER PROBLEM(思维)

原文:https://www.cnblogs.com/letlifestop/p/10742737.html

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