luogu#P9774. [HUSTFC 2023] 新取模运算

[HUSTFC 2023] 新取模运算

题目描述

在这道题中,我们定义一个新的运算符号 \oplus 并将其称为新取模运算。

当计算 xyx \oplus y 时,如果 xx 不是 yy 的倍数,则得到 xx 除以 yy 的余数; 否则令 xx 不断除以 yy 直到 xx 不再是 yy 的倍数,假设它为 xx',然后得到 xx' 除以 yy 的余数。例如,45=44\oplus 5=4205=420\oplus 5=41005=4100\oplus 5=4

给定一个质数 pp,接下来会有多组询问,对于每次询问会给出一个整数 nn,你需要计算出 n!pn!\oplus p 的值。其中 n!n!nn 的阶乘,即所有小于等于 nn 的正整数的乘积。

输入格式

第一行包含两个整数 T (1T105)T\ (1\le T\le 10^5)p (2p106)p\ (2\le p\le 10^6),分别表示询问的次数和给定的质数。

接下来 TT 行,每行包含一个整数 n (1n1018)n\ (1\le n\le 10^{18}),含义如题目所述。

输出格式

对于每次询问,输出一行包含一个整数,即 n!pn!\oplus p 的值。

3 7
11
45
14
4
1
2

2 10007
1919
810
3152
3679