普通的组合数C(n,m)在数据较小的情况下可以先用杨辉三角存储组合值,取模的话再%p即可。但是如果n,m很大,组合的结果自然很多,pascal自然不能完成任务,这样的取模问题可以使用数论里的Lucas定理来解决。
数论Lucas定理是用来求 c(n,m) mod p的值,p是素数(从n取m组合,模上p)。
描述为:
Lucas(n,m,p)=Cm(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;
而 这里的Cm(a,b)
数论Lucas定理是用来求 c(n,m) mod p的值,p是素数(从n取m组合,模上p)。
描述为:
Lucas(n,m,p)=Cm(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;
而 这里的Cm(a,b)
(费马小定理,逆元)
看一个例子:http://acm.fzu.edu.cn/problem.php?pid=2020