题意:
这题就是求 (n-1)!modn(n−1)! mod n
思路:
如果nn为合数,显然答案为0.
如果nn为素数,那么由威尔逊定理可得答案为 n-1n−1
注意有个trick为 nn = 4.
#include <cstdio>
#include <cstring>
bool Is_Prime(int num) {
if (num == 2 || num == 3)
return true;
if (num % 6 != 1 && num % 6 != 5)
return false;
for (int i = 5; i * i < num; i += 6) {
if (num % i == 0 || num % (i + 2) == 0)
return false;
}
return true;
}
int main () {
int t;
int n;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
if (n == 4) {
printf("2\n");
continue;
}
if (Is_Prime(n))
printf("%d\n", n - 1);
else
printf("0\n");
}
return 0;
}