hdu 4349 Xiao Ming's Hope 規律
阿新 • • 發佈:2017-07-21
pos stream was problem cnblogs style sent count .... +C(n,1)+C(n,2)+...+C(n,n)=?". Of course, Xiao Ming knew the answer, but he didn‘t care about that , What he wanted to know was that how many odd numbers there were? Then he began to count odd numbers. When n is equal to 1, C(1,0)=C(1,1)=1, there are 2 odd numbers. When n is equal to 2, C(2,0)=C(2,2)=1, there are 2 odd numbers...... Suddenly, he found a girl was watching him counting odd numbers. In order to show his gifts on maths, he wrote several big numbers what n would be equal to, but he found it was impossible to finished his tasks, then he sent a piece of information to you, and wanted you a excellent programmer to help him, he really didn‘t want to let her down. Can you help him?
Input
Each line contains a integer n(1<=n<=108)
Xiao Ming‘s Hope
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Output A single line with the number of odd numbers of C(n,0),C(n,1),C(n,2)...C(n,n).
Sample Input 1 2 11
Sample Output 2 2 8
Author HIT
Source 2012 Multi-University Training Contest 5
題意:C(n,m)表示組合數n個取m的方案數;
求C(n,0),C(n,1),C(n,2),......C(n,n)有多少個奇數;
思路:打表找規律,
證明:盧卡斯
C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p;
令p等於2,C(n%p,m%p) 為C(1,1),C(1,0),C(0,0),C(0,1) ,
枚舉n的二進制表示每一位數,當前位為1是可以有兩種方案;
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> using namespace std; #define LL long long #define pi (4*atan(1.0)) #define eps 1e-8 #define bug(x) cout<<"bug"<<x<<endl; const int N=1e2+10,M=2e6+10,inf=1e9+10; const LL INF=1e18+10,mod=1e9+7; int main() { int n; while(~scanf("%d",&n)) { int ans=0; while(n) { if(n&1)ans++; n/=2; } cout<<(1<<ans)<<endl; } return 0; }
hdu 4349 Xiao Ming's Hope 規律