HDU 3304 Interesting Yang Yui Triangle 卢卡斯定理
HDU 3304 Interesting Yang Yui Triangle 卢卡斯定理
题意
给出素数\(P\)和正整数\(N\),求杨辉三角的第\(N\)行中不能被\(P\)整除的数有几个。
\[P \leq 1000,N \leq 10^9
\]
分析
卢卡斯定理说明了关于组合数取模
\[\binom{n}{m} = \prod \binom{n_i}{m_i} \pmod p
\]
其中\(n_i,m_i\)分别表示\(p\)进制下\(n,m\)的第\(i\)位
不难发现\(\binom{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\n",kase++,ans);
}
}