https://ac.nowcoder.com/acm/contest/889/B

假如我们能够求出 \(x-y\) 在模p意义的值,那么就可以和 \(x+y\) 联立解出来了。

由于 \((x-y)^2=(x+y)^2-4xy=b^2-4c\) ,那么设 \(n=b^2-4c\) ,就是要求解出一个二次剩余。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int p = 1e9 + 7;
struct hh {
ll x, y;
hh() {};
hh(ll _x, ll _y) {
x = _x;
y = _y;
}
};
ll w;
hh mul(hh a, hh b, ll p) {
hh ans;
ans.x = (a.x * b.x % p + a.y * b.y % p * w % p) % p;
ans.y = (a.x * b.y % p + a.y * b.x % p) % p;
return ans;
}
hh quick1(hh a, ll b, ll p) {
hh ans = hh(1, 0);
while(b) {
if(b & 1)
ans = mul(ans, a, p);
a = mul(a, a, p);
b >>= 1;
}
return ans;
}
ll quick2(ll a, ll b, ll p) {
ll ans = 1;
while(b) {
if(b & 1)
ans = (ans * a) % p;
b >>= 1;
a = (a * a) % p;
}
return ans;
}
ll solve(ll a, ll p) { //求解 x^2=a(mod p) 的x的值
a %= p; //注意这句话
if(a == 0)
return 0;//注意这句话
if(p == 2)
return a;
if(quick2(a, (p - 1) / 2, p) == p - 1)
return -1;
ll b, t;
while(1) {
b = rand() % p;
t = b * b - a;
w = (t % p + p) % p;
if(quick2(w, (p - 1) / 2, p) == p - 1)
break;
}
hh ans = hh(b, 1);
ans = quick1(ans, (p + 1) / 2, p);
return ans.x;
} ll qpow(ll x, ll n, ll p) {
ll res = 1;
while(n) {
if(n & 1)
res = res * x % p;
x = x * x % p;
n >>= 1;
}
return res;
} ll x, y;
void solvexy(ll b, ll d) {
y = (b + d) % p * qpow(2, p - 2, p) % p;
x = (b - y + p) % p;
if(x > y)
swap(x, y);
return;
} int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
int t;
scanf("%d", &t);
while (t--) {
ll b, c;
scanf("%lld%lld", &b, &c);
ll n = b * b - 4ll * c;
n = (n % p + p) % p;
ll d = solve(n, p);
if (d == -1)
printf("-1 -1\n");
else {
solvexy(b, d);
printf("%lld %lld\n", x, y);
}
}
}

最新文章

  1. 详解用CSS3制作圆形滚动进度条动画效果
  2. [Asp.net 5] Logging-日志系统的基本架构(下)
  3. Web开发基本准则-55实录-缓存策略
  4. eclipse Run On Server 异常:could not load the Tomcat Server configuration at Servers\tomcat V5.0 Sertomcat
  5. 利用navigator对象在浏览器中检查插件
  6. 模拟MVC-WebForm实现ModelBinding
  7. SQL pivot 基本用法 行列转换 数据透视
  8. Android由一个activity 间隔5秒自动跳转到另外一个activity
  9. 关于strlen
  10. ESB 客户端调用 处理类
  11. 未能写入输出文件 c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary
  12. ORA-02069: global_names parameter must be set to TRUE for this operation
  13. BaseAdapter使listview设置不同背景图片并添加selector
  14. 基于visual Studio2013解决C语言竞赛题之1022最大数最小数
  15. android-studio-bundle-141.2178183首次执行Hello World的时候出现ADB not responding. If you&#39;d like to retry, then please manually kill &quot;adb.e的错误
  16. 【loj3056】【hnoi2019】多边形
  17. 搭建Hadoop2.7.1的分布式集群
  18. HTML JavaScript 基础学习
  19. centos svn 的搭建
  20. Task/Parallel实现异步多线程

热门文章

  1. Vue组件使用
  2. android 支持发送空短信
  3. FLASH和EEPROM的区别
  4. mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections
  5. 使用JS生成HTML标签,以达到母板页的效果
  6. 后盾网lavarel视频项目---lavarel多表关联一对多操作实例
  7. 方法三破解:Excel工作表保护密码
  8. leetcode 103二叉树的锯齿形层次遍历
  9. Kettle使用教程之Job使用
  10. nodejs之fs 模块