HDU 3304 Interesting Yang Yui Triangle 卢卡斯定理
题意
给出素数(P)和正整数(N),求杨辉三角的第(N)行中不能被(P)整除的数有几个。
[P leq 1000,N leq 10^9
]
分析
卢卡斯定理说明了关于组合数取模
[inom{n}{m} = prod inom{n_i}{m_i} pmod p
]
其中(n_i,m_i)分别表示(p)进制下(n,m)的第(i)位
不难发现(inom{m}{m} equiv 0 pmod p iff exists m_i,m_i > n_i)
于是只需要对于(n_i),统计(m_i leq n_i) 即(m_i)恰有(n_i + 1)种选择
[ans = prod (n_i + 1)
]
代码
int main(){
int kase = 1;
int P,N;
while(scanf("%d%d",&P,&N)) {
if(!P && !N) break;
int ans = 1;
while(N){
int tmp = N % P;
ans = (ll)ans * (tmp + 1) % 10000;
N /= P;
}
printf("Case %d: %04d
",kase++,ans);
}
}