碰到一道不错的扩展欧几里德题目 whu 1338
http://acm.whu.edu.cn/land/problem/detail?problem_id=1338
题意:N种不同的硬币,每种num[i]个。问把这些硬币摆成一条线共有多少种摆法。
解:设硬币共有sum个,不考虑相同硬币是同一种情况。
组合数学上的定理(这个忘了,又重新翻的,看来得做题才能加深印象):令S是一个多重集合,又k个不同类型的元素,各元素的重数没别为n1,n2,...,nk。设S的大小为n = n1 + n2 + ... + nk。则S的排列数为: n! / (n1!*n2!*...*nk!);
a = sum! % MOD, b = ∑num[i]! % MOD;
ans = a/b%MOD;
根据模运算公式
ans = (a%MOD * x%MOD)%MOD;
x为b的乘法逆元,即 b*x = 1(mod MOD);
可以用扩展欧几里德求x,然后解出ans。