https://www.luogu.com.cn/blog/902351/solution-p9707
管理员告诉我:很遗憾,您上传的题解 P9740 「KDOI-06-J」ION 比赛 题解 未能通过审核。原因是 【中文标点符号】与【英文、数字、公式或汉字】之间不应添加多余空格(单个换行符会被渲染为空格;); 。
但是我没有发现哪里错了,请大佬们帮我看看。。。
### 思路:
由于数据中说:$k \le {10^{12}}$,很明显,假如结果刚好在 $10^{12} - 1$ 的话,就会爆掉,因此需要用 $long\ long$。
假如我们每次都计算的话,就会超时,因此我们可以用一个数据,预处理 $1$ 到 $~l-1$ 的数的阶乘,在挨个遍历 $l$ 到 $r$ 的数据就行了。
AC CODE:
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 10;
long long a[N];
int main() {
long long l, r, k;
cin >> l >> r >> k;
long long s = 0;
a[0] = 1;
for (int i = 1; i < l; i++)
a[i] = a[i - 1] * i % k;
for (int i = l; i <= r; i++) {
a[i] = a[i - 1] * i % k;
s = (a[i] > s ? a[i] : s);
}
cout << s;
return 0;
}