您的位置:首页 > 运维架构

hdu 4349 Xiao Ming's Hope(Lucas定理)

2017-09-08 18:06 429 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4349

Lucas定理:A,B是非负整数,P是质数。A、B写成P进制

A=a
a[n-1]…a[0]

B=b
b[n-1]…b[0]

则组合数C(A,B)与C(a
,b
) * C(a[n-1],b[n-1]) * …*C(a[0],b[0])mod p同余

即:Lucas(n,m,p)=C(n%p,m%p)*Lucas(n/p,m/p,p)

因此本题中直接把A化成2进制,计算有多少个1,然后求出2^ans即可。

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,ans;
while(cin>>n)
{
ans=0;
while(n)
{
ans+=n%2;
n/=2;
}
printf("%d\n",1<<ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: