Lucas定理是用来求 c(n,m) mod p的值,p是素数(从n取m组合,模上p)
描述为:
Lucas(n,m,p)=combine(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;
(combine指的是求组合数)
Lucas定理:我们令n=sp+q , m=tp+r .(q ,r ≤p)(p为素数)
那么:
(在编程时你只要继续对
调用Lucas定理即可。
代码可以递归的去完成这个过程,其中递归终点为t = 0 ;
时间O(logp(n)*p):)
费马小定理(Fermat’s little theorem)是数论中的一个重要定理,在1636年提出。如果p是一个质数,而整数a不是p的倍数,则有a^(p-1)≡1(mod p)。