关于lucas的应用
2017-05-11 15:55
169 查看
首先给出Lucas(卢卡斯)定理:
则组合数C(A,B)与C(a
,b
)×C(a[n-1],b[n-1])×…×C(a[0],b[0]) mod p同余。
即:Lucas(n,m,p)=C(n%p,m%p)×Lucas(n/p,m/p,p) ,特别的,Lucas(x,0,p)=1。
又知道(a/b)mod p=a*b^(p-2)mod p(这里用到了一点逆元和费马小定理的知识),这样我们就可以在计算阶乘的过程中对p取模,不会造成溢出。(需要注意的是Lucas定理处理的p的范围大致为10^5数量级)
lucas 的预处理 :
一些对于n很大的情况得用lucas
非预处理模板:
有非负整数A、B,和素数p,A、B写成p进制为:A=a a[n-1]...a[0],B=b b[n-1]...b[0]。
则组合数C(A,B)与C(a
,b
)×C(a[n-1],b[n-1])×…×C(a[0],b[0]) mod p同余。
即:Lucas(n,m,p)=C(n%p,m%p)×Lucas(n/p,m/p,p) ,特别的,Lucas(x,0,p)=1。
其实说白了,Lucas定理就是求组合数C(n,m)mod p(p是素数)的值, 即(( n! /(n-m)!)/m! )mod p,而我们
又知道(a/b)mod p=a*b^(p-2)mod p(这里用到了一点逆元和费马小定理的知识),这样我们就可以在计算阶乘的过程中对p取模,不会造成溢出。(需要注意的是Lucas定理处理的p的范围大致为10^5数量级)
lucas 的预处理 :
void init(){ a[0] = a[1] = 1; fact[0] = fact[1] = 1; inv[1] = 1; for(int i = 2; i <= 100005; i++) { fact[i] = fact[i-1] * i % mod; inv[i] = (mod - mod/i)*inv[mod%i]%mod; a[i] = a[i-1] * inv[i] % mod; } } LL C(int n, int m){ return fact *a[n-m]%mod*a[m]%mod; }
一些对于n很大的情况得用lucas
非预处理模板:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; typedef long long llg; const int N =150000; llg n, m, p, fac ; void init() { int i; fac[0] =1; for(i =1; i <= p; i++) fac[i] = fac[i-1]*i % p; } llg quick_mod(llg a, llg b) { llg tmp = a % p, ans =1; while(b) { if(b &1) ans = ans * tmp % p; tmp = tmp*tmp % p; b >>=1; } return ans; } llg C(llg n, llg m) { if(m > n) return 0; return fac *quick_mod(fac[m]*fac[n-m], p-2) % p; } llg Lucas(llg n, llg m) { if(m ==0) return 1; else return (C(n%p, m%p)*Lucas(n/p, m/p))%p; } int main() { int t; scanf("%d", &t); while(t--) { scanf("%I64d%I64d%I64d", &n, &m, &p); init(); printf("%I64d\n", Lucas(n+m, m)); } return 0; }
相关文章推荐
- 关于网站(B/S开发中) cache应用(多图)
- 关于python中的enumerate函数的应用
- 关于Oracle的Clob数据类型在Hibernate中的应用
- 一个关于iphone应用邮件功能的问题
- 关于报表自定义函数的应用
- 关于字典与列表的学习2(三级菜单的应用)(week2)
- 关于“基于消息驱动的面向对象通用C/S应用框架的源码”
- 关于UIWebView的一些应用,包括与JS交互,前进,后退等
- android中关于actionBar的一些应用
- 关于Scrum在项目实战中的应用
- 统计一下现有手机端关于智能电网的应用(苹果端)
- 关于Android开发中启动应用但桌面不显示图标的问题
- 关于图片集成视频方面的应用
- 关于大型asp.net应用系统的架构-架构的选择
- 关于正则表达式 基本语法 及java中的应用
- 应用库后关于_OBJC_CLASS_$_文件referenced from:objc-class-ref in报错的测试总结
- 关于“企业应用”
- 关于Object-C有关接口方面的应用
- 关于android应用中植入广告尝试(新手篇。给和我一样的菜鸟用)
- 关于enum应用的总结