计算乘积(debug)

问题遇到的现象和发生背景

计算乘积(debug)

我的解答思路和尝试过的方法

题目描述
正整数 xx 的阶乘 x!=x(x-1)(x-2)\cdots\times 2\times 1x!=x(x−1)(x−2)⋯×2×1,特殊地,0! = 10!=1。

请你计算 n! \bmod mn!modm 的值。

请找出使下面的程序出错的数据,使用输出调试法确定出错的语句,并用乘法取模定理将其改正。

#include
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int fac = 1;
for(int i = 2; i <= n; i++)
fac *= i;
fac %= m;
cout << fac;
return 0;
}
乘法取模定理:(a \times b) \bmod m = ((a \bmod m) \times (b \bmod m)) \bmod m(a×b)modm=((amodm)×(bmodm))modm。

输入格式
输入共一行。

第一行,两个整数 n, mn,m(0 \le n \le 1,000, 2 \le m \le 10,0000≤n≤1,000,2≤m≤10,000)。

输出格式
输出共一行,一个整数,表示 n! \bmod mn!modm。

我想要达到的结果

完成

好像看不太懂啊

img


还有这个呢?

img

计算阶乘小心数据超限,long long 表示64位整数,Int 表示32 位,就算用double ,1000的阶乘也是不够
既然他要求结果取m的模。
根据计算 公式 (XY)%m=[(x%m)(y%m)]%m 可以解决超限的问题