51nod 1120 Lucas定理
来源:互联网 发布:网络推广经理职责 编辑:程序博客网 时间:2024/06/05 20:10
题目就不说了
这题是一个经典的卢卡斯定理的运用,从左上走到右下,维护只能走下或上,其实就是类似V2V1,但是不能经过对角线,即障碍物,那么组合数乱搞就可以了,然而摸数太小,于是我们用lucas定理。
原理:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p;
递归算就可以了,注意求逆元,线性或者exgcd都可以。
const mo=10007;var i,j,k,p,m:longint; fac:Array[0..200000]of int64; x,y,n,ans:int64;function pow(a,b:int64):int64;var base,r:int64;begin base:=a; r:=1; while b<>0 do begin if b and 1<>0 then r:=r*Base mod mo; base:=base*Base mod mo; b:=b div 2; end; exit(r);end;procedure exgcd(a,b:int64;var x,y:int64);var x1,y1:int64;begin if b=0 then begin x:=1; y:=0; exit; end; exgcd(b,a mod b,x1,y1); x:=y1; y:=x1-(a div b)*y1;end;function lucas(n,m,p:int64):int64;var ans,a,b:int64;begin ans:=1; while (n<>0)and(m<>0)do begin a:=n mod p; b:=m mod p; if a<b then exit(0); ans:=((ans*fac[a]mod p)*(pow(fac[b]*fac[a-b]mod p,p-2)))mod p; n:=n div p; m:=m div p; end; exit(ans); end;begin readln(n); fac[0]:=1; for i:=1 to mo do fac[i]:=fac[i-1]*i mod mo; exgcd(n,mo,x,y); x:=(x mod mo+mo)mod mo; x:=x<<1; ans:=lucas(2*n-2,n-1,mo); ans:=(ans*x)mod mo; writeln(ans);end.
0 0
- 51nod 1120 Lucas定理
- 51nod 1120 机器人走方格 V3(卡特兰数,lucas定理)
- 2017-10-22 51nod 1120 卢卡斯定理 Lucas 组合数取模 卡特兰数
- 51nod 1119 机器人走方格V2 lucas定理
- [方差+lucas定理] 51nod 算法马拉松25 D. 小Q的集合
- Lucas 定理
- Lucas 定理
- lucas定理
- Lucas定理
- Lucas 定理
- Lucas 定理
- Lucas 定理
- Lucas 定理
- Lucas定理
- lucas定理
- lucas定理
- Lucas定理
- Lucas定理
- idea+maven+scala创建wordcount,打包jar并在spark on yarn上运行
- js 定义变量的时候 var 和不带var的作用 具体代码演示
- Struts 配置
- 学长出的RE题
- ZCMU-1133- 第九章:致我们终将逝去的青春
- 51nod 1120 Lucas定理
- java.sql.SQLException: Lock wait timeout exceeded
- jq中的延迟对象详解
- 常见JVM问题
- 基础知识学习1之哈希(Hash)
- ARP攻击
- sonar常见问题修改
- caffe中Layer type * already registered和Unknown layer type错误
- [04]项目实战-PC 端固定布局(4)