首页
Java
登录
6mi
u
盘
搜
搜 索
Java
阶乘取模预处理
阶乘取模预处理
xiaoxiao
2021-02-28
109
int
fact[MAX_P];
//预处理n! mod p的表 O(p)
//分解n!=ap^e,返回a mod p O(log_p n)
int
mod_fact(
int
n,
int
p,
int
& e) { e=
0
;
if
(n==
0
)
return
1
;
//计算p的倍数的部分
int
res=mod_fact(n/p,p,e); e+=n/p;
//由于(p-1)!=-1,因此(p-1)!^(n/p)只需要知道n/p的奇偶性就可以计算了。
if
(n/p
%2
!=
0
)
return
res
*(
p-fact[n
%p
])
%p
;
return
res
*fact
[n
%p
]
%p
; }
转载请注明原文地址: https://www.6miu.com/read-42982.html
技术
最新回复
(
0
)