二次剩余模板
二次剩余模板
x2≡n(modp)x ^ 2 \equiv n \pmod px2≡n(modp)
/*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc++.h>#define mp make_pair #define pb push_back #define endl '\n' #define mid (l + r >> 1) #define lson rt << 1, l, mid #define rson rt << 1 | 1, mid + 1, r #define ls rt << 1 #define rs rt << 1 | 1using namespace std;typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> pii;const double pi = acos(-1.0); const double eps = 1e-7; const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x; }struct com {int real, image;com(int a = 0, int b = 0) : real(a), image(b) {} };int I2, p;com operator * (com a, com b) {return com((1ll * a.real * b.real + 1ll * a.image * b.image % p * I2) % p, (1ll * a.real * b.image + 1ll * a.image * b.real) % p); }com power(com a, int k) {com ans = 1;while(k) {if(k & 1) ans = ans * a;a = a * a;k >>= 1;}return ans; }int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T = read();mt19937 e(233);while(T--) {int n = read();p = read();if(n == 0) {puts("0");continue;}if(power(n, (p - 1) >> 1).real == p - 1) {puts("Hola!");continue;}uniform_int_distribution<int> r(0, p - 1);int a = r(e);while(power((1ll * a * a % p - n + p) % p, (p - 1) >> 1).real == 1) a = r(e);I2 = (1ll * a * a % p - n + p) % p;int x = power(com(a, 1), (p + 1) >> 1).real, y = p - x;if(x > y) swap(x, y);printf("%d %d\n", x, y);}return 0; }總結
- 上一篇: qq企业邮箱服务器怎么设置(qq企业邮箱
- 下一篇: 163邮箱怎么开启smtp()