碰到一道不错的扩展欧几里德题目 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。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步