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);
}
}
}

2019牛客暑期多校训练营(第九场) - B - Quadratic equation - 二次剩余的更多相关文章

  1. 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem

    题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一 ...

  2. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  3. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  4. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  5. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  6. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  7. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  8. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  9. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  10. 2019牛客暑期多校训练营(第八场)E.Explorer

    链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unli ...

随机推荐

  1. sh_11_字典的其他操作

    sh_11_字典的其他操作 xiaoming_dict = {"name": "小明", "age": 18} # 1. 统计键值对数量 p ...

  2. Spark 电子书

    Spark最佳实践 (陈欢/林世飞著) 完整pdf扫描版[39MB]http://pan.baidu.com/s/1i4LNOVVSpark SQL编程指南 (Spark 官方文档翻译) 中文PDF版 ...

  3. SPP框架的基本使用

    入职两天 Day1.Day2: 学习SPP框架 SPP是什么? SPP提供了一系列的基础功能,是一个通用的网络服务器运行框架.主要由proxy,worker,controller三个模块组成.它提供A ...

  4. 「HAOI2016」食物链

    题目链接 解题思路 简单的DAG上DP即可. 参考程序 #include <bits/stdc++.h> using namespace std; const int Maxn = 100 ...

  5. java命令--jstack 工具【转载】

    一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...

  6. sqli-labs(42)

    0x01 喔? 熟悉的界面? 注册一下 但是好像不行了 那我们只有 嘻嘻看看页面了 也是以失败告终的  那我们该怎么办  我们来看看源码 我们看见login的页面未对 password进行任何的过滤 ...

  7. Redis大 key的发现与删除方法全解析

    个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量.速度要求很高,为此,我们选择了高性 ...

  8. 剑指offer32----之字形打印一颗二叉树

    题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 思路 在这里我们如果单纯的使用队列去弄的话,会很 ...

  9. 套接字之sendto系统调用

    sendto系统调用用于向指定的目的地址发送数据,其系统调用的流程比较容易理解,如下面所示,其主要完成 (1)将用户数据组织成msghdr,(2)而后调用socket操作的sendmsg:ipv4对应 ...

  10. js style.display = "" 和style.display="none" 区别

    style.display = "":是清除display样式,display将使用默认值(块元素会变成block,内联元素会变成inline)style.display=&quo ...