题意:

传送门
已知\(0 <= x <= y < p, p = 1e9 + 7\)且有
\((x+y) = b\mod p\)
\((x\times y)=c\mod p\)
求解任意一对\(x,y\),不存在输出\(-1\ -1\)。

思路:

由两式变化可得\((y - x)^2 = (b^2 -4c + p) \% p \mod p\),那么可以应用二次剩余定理解得\(y - x\)的值,我们可以知道\((x+y) = b\)或者\((x+y) = b + p\),那么直接求解即可。

代码:

#include<map>
#include<set>
#include<queue>
#include<stack>
#include<ctime>
#include<cmath>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 5e4 + 5;
const int INF = 0x3f3f3f3f;
const ull seed = 131;
const ll MOD = 1e9 + 7;
using namespace std;ll ppow(ll a, ll b, ll mod){ll ret = 1;a = a % mod;while(b){if(b & 1) ret = ret * a % mod;a = a * a % mod;b >>= 1;}return ret;
}
struct TT{ll p, d;
};
ll w;
TT mul_er(TT a, TT b, ll mod){TT ans;ans.p = (a.p * b.p % mod + a.d * b.d % mod * w % mod) % mod;ans.d = (a.p * b.d % mod + a.d * b.p % mod) % mod;return ans;
}
TT power(TT a, ll b, ll mod){TT ret;ret.p = 1, ret.d = 0;while(b){if(b & 1) ret = mul_er(ret, a, mod);a = mul_er(a, a, mod);b >>= 1;}return ret;
}
ll legendre(ll a, ll p){return ppow(a, (p - 1) >> 1, p);
}
ll modulo(ll a, ll mod){a %= mod;if(a < 0) a += mod;return a;
}
ll solve(ll n, ll p){   //x^2 = n mod pif(n == 0) return 0;if(n == 1) return 1;if(p == 2) return 1;if(legendre(n, p) + 1 == p) return -1;  //无解ll a = -1, t;while(true){a = rand() % p;t = a * a - n;w = modulo(t, p);if(legendre(w, p) + 1 == p) break;}TT temp;temp.p = a;temp.d = 1;TT ans = power(temp, (p + 1) >> 1, p);return ans.p;
}
bool getans(ll sum, ll dec, ll &x, ll &y){if((sum + dec) % 2 == 0){y = (sum + dec) / 2;x = y - dec;if(x >= 0 && x + y == sum && y < MOD) return true;else return false;}else return false;
}
int main(){int T;scanf("%d", &T);while(T--){ll b, c;scanf("%lld%lld", &b, &c);ll d = solve((b * b % MOD - 4 * c % MOD + MOD) % MOD, MOD);if(d == -1){printf("-1 -1\n");continue;}ll x, y;if(getans(b, d, x, y)){printf("%lld %lld\n", x, y);}else if(getans(b + MOD, d, x, y)){printf("%lld %lld\n", x, y);}else if(getans(b, MOD - d, x, y)){printf("%lld %lld\n", x, y);}else if(getans(b + MOD, MOD - d, x, y)){printf("%lld %lld\n", x, y);}}return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/11365909.html

2019牛客多校第九场B Quadratic equation(二次剩余定理)题解相关推荐

  1. 2019牛客多校第九场AThe power of Fibonacci(广义BM)

    2019牛客多校第九场AThe power of Fibonacci(广义BM) 题目大意 求斐波那契数列m次方的前n项和 解题思路 显然,斐波那契的m次方前缀和依然是线性递推,因此考虑用exBM求解 ...

  2. Quadratic equation(二次剩余)2019牛客多校第九场

    链接:https://ac.nowcoder.com/acm/contest/889/B 来源:牛客网 题目描述 Amy asks Mr. B problem B. Please help Mr. B ...

  3. 2019牛客多校第九场 H Cutting Bamboos (二分主席树)

    看到题解说二分 心里也有数了..... H Cutting Bamboos 给了一些高度得柱子 每区间你可以坎y次 y次之后 必须砍没有了 没有砍 总长度得一样 问第x次砍得高度在哪里 因为砍得次数 ...

  4. 2019牛客多校第九场AThe power of Fibonacci——扩展BM

    题意 求斐波那契数列m次方的前n项和,模数为 $1e9$. 分析 线性递推乘线性递推仍是线性递推,所以上BM. 由于模数非质数,上扩展版的BM. 递推多少项呢?本地输入发现最大为与前57项有关(而且好 ...

  5. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

  6. Cutting Bamboos(牛客多校第九场H主席树+二分+思维)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...

  7. 2019 牛客多校第二场 4/10

    题会慢慢补完的,最近在帮别人上课,补题速度很慢,一边看ppt一边刷ppt的题还要补多校的,感觉有点应付不过来,不过以后会慢慢补完的(指整个暑假) A 这场出题人的英文水平真的搞事,不说了((( 这题起 ...

  8. 2019 牛客多校第一场 F Random Point in Triangle

    题目链接:https://ac.nowcoder.com/acm/contest/881/F 题目大意 给定二维平面上 3 个整数表示的点 A,B,C,在三角形 ABC 内随机选一点 P,求期望$E ...

  9. 2019 牛客多校第一场 E ABBA

    题目链接:https://ac.nowcoder.com/acm/contest/881/E 题目大意 问有多少个由 (n + m) 个 'A' 和 (n + m) 个 'B',组成的字符串能被分割成 ...

  10. 牛客多校第九场 H Cutting Bamboos —— 主席树

    题目链接:点我啊╭(╯^╰)╮ 题目大意: 给你一片竹林,编号 1 1 1 到 n n n ,给定初始高度     每次查询区间,问一共砍 y y y 刀的时候,第 x x x 刀的高度     要求 ...

最新文章

  1. 牧小熊:Adobe Illustrator 在科研作图中的应用!
  2. 在2020年,你觉得计算机视觉有哪些值得研究的领域?
  3. (chap3 数据链路) 数据链路概览
  4. 台式电脑可以连wifi吗_不使用WIFI,手机也可以通过电脑的网络上网
  5. python-操作xml格式的文件
  6. vlan划分_什么样的网络需要划分VLAN?
  7. fastclick.js插件使用简单说明
  8. 【学习OpenCV4】OpenCV4入门介绍
  9. 什么是光纤?光纤的原理是什么?你能想象没有光纤通讯的世界么?
  10. php strpos注意问题坑,strpos函数的坑
  11. 计算机组成原理和微机原理实验报告,《计算机组成原理》实验指导.doc
  12. PMSM学习笔记1——永磁同步电机的工作原理与数学模型
  13. 意识的哲学、生理及智能属性研究
  14. 有没有什么好的可以做读书笔记的APP推荐?
  15. 图文并茂——从Kubernetes的诞生背景到什么是Kubernetes, 带你深度解析Kubernetes
  16. ansible从入门到放弃
  17. 第28课:彻底解密Spark Sort-Based Shuffle排序具体实现内幕和源码详解
  18. 以后数据收集、共享、查询全靠它了,太高效!
  19. 质数/素数筛选c++超简单版写法
  20. cs230 deeplearning.ai 1: Standard NN

热门文章

  1. 5G来临,一对一直播社交源码如何利用热门机制吸引万千用户?
  2. Vue Document
  3. vue2.0click点击事件修饰符stop阻止单击事件冒泡prevent阻止默认事件
  4. Ant :Property
  5. TreeList显示CheckBox
  6. CentOS 6.5 x64安装svn
  7. KNN——K nearest neighbor
  8. 电脑快捷键(键盘不灵了赶紧使用快捷键)
  9. C语言深入浅出可变参数函数的使用技巧(转)
  10. 【转载】李开复宣布与金山合作 谷歌迈出中国第三步