PERFECT NUMBER PROBLEM(思维)
题目链接: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 }

更多精彩