#P5282. 【模板】快速阶乘算法

    ID: 4211 远端评测题 2000ms 256MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>数学倍增快速傅里叶变换 FFT快速数论变换 NTT

【模板】快速阶乘算法

Description

给你正整数 nn,和一个质数 pp,你需要求出:

n! mod pn! \text{ mod } p

TT 组数据。

Input Format

第一行一个正整数 TT,表示数据组数。
接下来 TT 行,每行两个正整数 n,pn,p,意义如题目描述。

Output Format

输出 TT 行,表示每组数据的答案。

4
16777216 998244353
72267859 998244353
2333333 19260817
1919810 2147481811
789885751
569626621
16351109
1416439247

Hint

数据范围:

对于 10%10\% 的数据:p=998244353p = 998244353
对于另外 10%10\% 的数据:p=1004535809p = 1004535809
对于 100%100\% 的数据:1n<p23111\le n < p \le 2^{31}-11T51 \le T \le 5
保证 pp 为质数。

【提示】
请确保你的算法时间复杂度不高于 Θ(nlogn)\Theta(\sqrt n \log n),时限为 std 的十倍以上。