2021杭電多校2 1010/HDU 6970 I love permutation
阿新 • • 發佈:2021-07-26
題目連結:https://acm.hdu.edu.cn/showproblem.php?pid=6970
題目大意:有一個長度為\(P-1\)的序列滿足\(b_{i} = ai(mod \ P)\),其中\(P\)為奇素數,求這個序列逆序對的奇偶
題目思路:
若\(k\)為置換\(g\)的逆序數,則有
其中\(g(i)\)的意思是置換的結果
證明參考 這裡ACM要什麼證明
本題的置換為
代入計算公式
\[\prod_{1\leq i< j < P}^{}\frac{g\left (j \right )-g\left ( i \right )}{j-i}\\ =\prod_{1\leq i< j < P}^{}\frac{aj \ mod \ P-ai \ mod \ P}{j-i}\\ =\prod_{1\leq i< j < P}^{}\frac{a(j-i) \ mod \ P}{j-i}\\ =\prod_{1\leq i< j < P}^{}\frac{a(j-i) }{j-i} \ mod \ P\\ =a^{\frac{P(P-1)}{2}} \ mod \ P\\ =a^{\frac{P(P-1)}{2} \ mod \ \varphi (P) } \ mod \ P\\ =a^{\frac{(P-1)}{2} } \ mod \ P\\ \]AC程式碼:
#include <unordered_map> #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <string> #include <stack> #include <deque> #include <queue> #include <cmath> #include <map> #include <set> using namespace std; typedef pair<int, int> PII; typedef pair<double, int> PDI; typedef __int128 int128; typedef long long ll; typedef unsigned long long ull; const int INF = 0x3f3f3f3f; const int N = 1e6 + 10, M = 4e7 + 10; const int base = 1e9; const int P = 131; const int mod = 998244353; const double eps = 1e-8; const double PI = acos(-1.0); ll ksm(ll a, ll b, ll mod) { ll res = 1 % mod; while (b) { if (b & 1) res = (int128)res * a % mod; a = (int128)a * a % mod; b >>= 1; } return res; } int main() { int T; scanf("%d", &T); while (T--) { ll a, P; scanf("%lld%lld", &a, &P); ll ans = ksm(a, (P - 1) / 2, P); if (ans == 1) printf("0\n"); else printf("1\n"); } return 0; }