前面讲一些关于数论的历史?忽略
题意就是让你找一个满足那个长长式子的数
有两种问题,一个数问你(x,y)之间有多少个这样的数,一个是问你是不是这个数
左边其实就是一个二项式定理展开式,即是
所以有
因为
本身是
的因子
所以其实问题就是问你
是不是完全数
完全数(Perfect number,又称完美数或完备数)是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。—搜狗百科
搜狗百科讲的挺好的
添加链接描述
目前找到的完全数只有50个,所以竞赛需要大可以直接存
然后就投机取巧了亲
n取下列值时,
是前40个完全数:
2,3,5,7,13,17,19,31,61,89,107,127,521,607,1279,2203,2281,3217,4253,4423,9689,9941,11213,19937,21701,23209,44497,86243,110503,132049,216091,756839,859433,1257787,1398269,2976221,3021377,6972593,13466917,20996011;
代码:
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
const int MX=1e6+7;
const int mod=1e9+7;
using namespace std;
ll qpow(ll a,ll b,ll MOD=mod){for(ll ans=1;;a=a*a%MOD,b>>=1){if(b&1)ans=ans*a%MOD;if(!b)return ans;}}
ll inv(ll a,ll MOD=mod){return qpow(a,MOD-2,MOD);}
ll __gcm(ll a,ll b){return a*b/__gcd(a,b);}
int top=0,t;
map<pair<int,int>,int>mp;
ll W[10]={6,28,496,8128,33550336,8589869056,137438691328,2305843008139952128};
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
int T;
// Partition();
// cin>>T;
char A;
while(cin>>A)
{
if(A=='A')
{
ll x,y;
cin>>x>>y;
if(x>y)swap(x,y);
int ans=0;
for(int i=0;i<8;i++)
{
if(W[i]>=x&&W[i]<=y)
ans++;
}
cout<<ans<<endl;
}
else{
ll x;
cin>>x;
int tmp=0;
for(int i=0;i<8;i++)
{
if(W[i]==x)
tmp=1;
}
cout<<tmp<<endl;
}
}
}