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

    ID: 11014 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 显示难度普及+/提高− 上传者: 标签>2023O2优化高校校赛

[HUSTFC 2023] 新取模运算

题目描述

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

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

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

输入格式

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

接下来 TT 行,每行包含一个整数 n (1≤n≤1018)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