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

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

首先打表前三个,发现满足 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 }

 

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄