如果我们直接计算的话,复杂度一定无法处理,所以我们需要观察这个式子,尝试从中找到规律,我们发现n的数量可以很大,而对于一系列的连乘取模,只要出现一次0就会全变成0,那么题目中又说有n个不同整数,我们根据鸽巢原理可以发现
只要n>m那么就一定会有两个同余的数,那么这两个数结合时modm一定为0,所以n>m时直接输出0,其他情况只需暴力即可处理‘
代码如下
#include <bits/stdc++.h>
using namespace std;
int n, m;
long long x[1005], ans = 1;
int main() {
scanf("%d%d", &n, &m);
if (n > 1005)
puts("0");
else {
for (int i = 0; i < n; i++)
scanf("%lld", x + i);
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
ans = (ans * abs(x[i] - x[j])) % m;
printf("%lld\n", ans);
}
}