题目来源于牛客竞赛:https://ac.nowcoder.com/acm/contest/discuss
题目描述:
输入描述:
输出描述:
示例1:
题解:
代码:
#include <bits/stdc++.h>
using namespace std;
int t, p = 1000000007;
long long pow(long long x, long long y, long long p) {
long long re = 1;
for (; y > 0; y >>= 1) {
if (y & 1) {
re = re * x % p;
}
x = x * x % p;
}
return re;
}
int main() {
cin >> t;
for (int tt = 0; tt < t; tt++) {
long long b, c;
cin >> b >> c;
long long d = (b * b - 4 * c) % p;
if (d < 0) {
d += p;
}
if (d != 0 && pow(d, (p - 1) / 2, p) != 1) {
cout << -1 << ' ' << -1 << endl;
} else {
long long r = pow(d, (p + 1) / 4, p);
assert(r * r % p == d);
long long x = (b + r) * pow(2, p - 2, p) % p;
long long y = (b - r) * pow(2, p - 2, p) % p;
if (x < 0) {
x += p;
}
if (y < 0) {
y += p;
}
if (x > y) {
swap(x, y);
}
cout << x << ' ' << y << endl;
assert(x <= y && (x + y) % p == b && x * y % p == c);
}
}
}
更多问题,更详细题解可关注牛客竞赛区,一个刷题、比赛、分享的社区。
传送门:https://ac.nowcoder.com/acm/contest/discuss