题意:求杨辉三角形第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 }