题意:

x + y = b(mod p)

x * y = c(mod p)

题目给出b,c ,p = 1e9 + 7,求解x y 要求(0≤x≤y<p),若没有可行解,输出-1 -1

题解:

x + y = b(mod p) 可得 (x + y) ^ 2 = (b * b)(mod p).  再可得 x ^ 2 - 2 * x * y + y ^ 2 = (b * b mod p - 4 * c mod p + p ) (mod p),即二次剩余求解

考虑 x = y时 b ^ 2 - 4 * c  = 0的细节

求出  |x - y|  的解为 X 或 p - X 的话,由于y >= x,所以 y - x = X 或 y - x = p - X,考虑x + y 为 b 和 p + b两种情况分别判断是否满足 0 <= x <= y < p 即可,不满足输出 -1 -1

ps:金老板太厉害了,这种题目以后不可以陷到化简代换之中,应把握整体,构造恒等式求解

#include<cstdio>using namespace std;
const long long mod = 1e9 + 7;
#define LL long long
LL B,C;
LL Pow(LL a,LL b,LL p) {LL res = 1;for (; b; a = 1LL * a * a % p, b >>= 1)if (b & 1) res = 1LL * a * res % p;return res;
}bool Legendre(LL a,LL p) {return Pow(a, p - 1 >> 1, p) == 1;
}
bool check(LL b,LL x) {if ((b + x) % 2 == 1)return false;LL xx = (x + b) / 2;LL yy = (b - x) / 2;if (0 <= xx && xx < mod && 0 <= yy && yy < mod)return true;return false;
}
void modsqr(LL a,LL p) {LL x;LL i, k, b;if (p == 2) x = a % p;else if (p % 4 == 3) x = Pow(a, p + 1 >> 2, p);else {for (b = 1; Legendre(b, p); ++b);i = p - 1 >> 1;k = 0;do {i >>= 1;k >>= 1;if (!((1LL * Pow(a, i, p) * Pow(b, k, p) + 1) % p)) k += p - 1 >> 1;} while (!(i & 1));x = 1LL * Pow(a, i + 1 >> 1, p) * Pow(b, k >> 1, p) % p;}if (p - x < x) x = p - x;if (x == p - x) {if (check(B, x))printf("%lld %lld\n", (B - x) / 2, (B + x) / 2);else if (check(B + p, x))printf("%lld %lld\n", (B + p - x) / 2, 1LL * (B + p + x) / 2);else puts("-1 -1");} else {if (check(B, x)) printf("%lld %lld\n", (B - x) / 2, (B + x) / 2);else if (check(B, p - x)) printf("%lld %lld\n", (B - p + x) / 2, (B - x + p) / 2);else if (check(B + p, x)) printf("%lld %lld\n", (B - x + p) / 2, (B + x + p) / 2);else if (check(B + p, p - x)) printf("%lld %lld\n", (B + x) / 2, (B - x + 2 * p) / 2);else puts("-1 -1");}
}int main() {int T;scanf("%d", &T);LL a;while (T--) {scanf("%lld %lld", &B, &C);a = (B * B % mod - 4LL * C % mod + mod);a %= mod;if (a == 0) {if (B % 2 == 0) printf("%lld %lld\n", B / 2, B / 2);else printf("%lld %lld\n", (B + mod) / 2, (B + mod) / 2);continue;}if (!Legendre(a, mod)) {puts("-1 -1");continue;}modsqr(a, mod);}return 0;
}

转载于:https://www.cnblogs.com/smallhester/p/11363440.html

2019 牛客多校第9场 B Quadratic equation(二次剩余)相关推荐

  1. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  2. 2019牛客多校训练营第一场 H题 HOR 题解

    题目描述: 输入描述: 输出描述: 示例1: 题解: 更多问题可关注牛客竞赛区,一个刷题.比赛.分享的社区. 传送门:https://ac.nowcoder.com/acm/contest/discu ...

  3. 2019牛客多校 第七场 B Irreducible Polynomial 多项式因式分解判断

    链接:https://ac.nowcoder.com/acm/contest/887/B 来源:牛客网 Irreducible Polynomial 时间限制:C/C++ 1秒,其他语言2秒 空间限制 ...

  4. 2019牛客多校训练营第一场 E题 ABBA 题解

    问题描述: 输入描述: 输出描述: 示例1: 题解: 更多问题可关注牛客竞赛区,一个刷题.比赛.分享的社区. 传送门:https://ac.nowcoder.com/acm/contest/discu ...

  5. 2019牛客多校第七场 C Governing sand

    因为当时时间不怎么够就没写... 其实就是一个模拟题而已下面注释很清楚 链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 时间限制:C/C++ 3 ...

  6. 2019牛客多校第四场 B xor (线性基求交)

    xor 思路 题目是要求[l,r][l, r][l,r]的所有集合是否都可以得到xxx,那么显然我们可以对这[l,r][l, r][l,r]个线性基求交,然后再特判能否xxx能否插入,如果能插入,显然 ...

  7. 2019牛客多校第三场 F.Planting Trees

    题目链接 题目链接 题解 题面上面很明显的提示了需要严格\(O(n^3)\)的算法. 先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 ...

  8. 2019牛客多校第七场E Find the median 权值线段树+离散化

    Find the median 题目链接: https://ac.nowcoder.com/acm/contest/887/E 题目描述 Let median of some array be the ...

  9. 2019 牛客多校第三场 B Crazy Binary String

    题目链接:https://ac.nowcoder.com/acm/contest/883/B 题目大意 给定一个长度为 N 的 01 字符串,输出最长子串和子序列的长度,满足其中 0 和 1 的个数相 ...

最新文章

  1. Openresty最佳案例 | 第3篇:Openresty的安装
  2. Centos6.7安装docker1.7.1
  3. Web 开发最有用的 jQuery 插件集锦
  4. Chrome调试angularJS出现Uncaught SyntaxError: Unexpected identifier
  5. php cannot bind port to socket,PHP基于socket实现客户端和服务端通讯功能
  6. php动态页面引用,怎么在动态网页PHP中引用的使用注意事项
  7. Qt组态软件设计文章导航
  8. vfp保存为html,vfp向HTTP发送文件
  9. shell脚本的逻辑判断
  10. 抖音新王牌:“多闪”怎么快速引流脚本爆粉软件?批量添加多闪群批量私信好友!...
  11. Proxy和Reflect
  12. 云数智驱动数据高速增长,浪潮存储提供EB级容量扩展
  13. TextView源码解析
  14. 自然语言处理总复习(九)—— 机器翻译
  15. idea 汉化版 自定义类注释与方法注释 解决自定义注解出现红线
  16. 【转】phpcms授课学习
  17. 排队叫号医院管理源码
  18. error: cannot open Packages database in /var/lib/rpm
  19. 【入门】人见人爱A+B:时间相加
  20. 运行java maven项目提醒 -SNAPSHOT.jar中没有主清单属性(maven项目指定主类)

热门文章

  1. 零基础带你学习MySQL—自连接(二十一)
  2. 百度地图API的使用教程以及案例
  3. ip、子网掩码、默认网关以及传输过程
  4. 个人所得税如何填写最划算?
  5. 发生心梗后,家属做些什么才能保证患者获救,降低死亡?
  6. 有20万3年不用,怎样理财呢?
  7. 国内三巨头为什么那么成功
  8. 各年龄段都是怎么提加薪的?
  9. 未处理的超时和请求取消
  10. 什么叫做数字功放?它的电路原理是什么?