题意:求杨辉三角形第n+1行中不能被质数p整除的的数的个数。
题解:1、杨辉三角形第n+1行的数位:C(n,0)...C(n,n)
2、C(n,m)=n!/(m!(n-m)!),判断其能否被p整除就是看它是否含有因子p,n!中含有n/p+n/p^2+....n/p^k个p,由于C(n,m)是整数,所以不含的情况即n!中含p的个数等于其分子中含p的个数。
3、n/p,n/p^2,n/p^3...n/p^k实际就是n的p进制下的表示时各位的数。
4、假如n的第i位的p进制表示为a,那么要使最后不能被p整除,则分子的第i为的表示也应为a,但分子有m!和(n-m)!构成,实际上可以枚举第i位的表示,即0,1,2,3...a。
5、每一位都满足,所以最后答案就是(a1+1)*(a2+1)...(ak+1)
View Code
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int mod=10000; 5 int main() 6 { 7 int p,n,ca=0; 8 while(scanf("%d%d",&p,&n),n||p) 9 { 10 int ans=1; 11 while(n) 12 { 13 ans*=(n%p+1); 14 n/=p; 15 if(ans>=mod) 16 ans%=mod; 17 } 18 printf("Case %d: %04d\n",++ca,ans); 19 } 20 return 0; 21 }