题意:

已知

$x+y$ $mod$ $q = b$

$x*y$ $mod$ $q = c$

已知b和c,求x和y

题解:

容易想到$b^2-4c=x^2-2xy+y^2=(x-y)^2$

那么开个根号就能得到x-y,很容易就得出x和y了

在模q意义下对k开根号的方法就是找到w,使得$w*w$ $mod$ $q=k$

考虑模数q为奇质数的情况,可以用Tonelli-Shanks算法求解,这是一个概率算法,但是一般而言得出正确解的概率非常高,遇到类似问题套版即可。

#include<iostream>
#include<cmath>
#define MOD 1000000007
#define LL long long
using namespace std;
LL qpow(LL x,LL y,LL m){
//cal x^y%m
LL re = ;
while(y){
if(y & )//判断n的最后一位是否为1
re = (re * x) % m;
y >>= ;//舍去n的最后一位
x = (x * x) % m;//将a平方
}
return re % m;
}
class ModSqrt{
public:
LL power(LL x,LL y,LL m){
//cal x^y%m
LL re = ;
while(y){
if(y & )//判断n的最后一位是否为1
re = (re * x) % m;
y >>= ;//舍去n的最后一位
x = (x * x) % m;//将a平方
}
return re % m;
} LL normal_power(LL a,LL b){
LL re = ;
while(b){
if(b & )//判断n的最后一位是否为1
re = (re * a);
b>>= ;//舍去n的最后一位
a = (a * a);//将a平方
}
return re;
} LL inverse(LL a,LL m){
return power(a,m-,m);
} LL getn(LL p){
for(LL i=;i<p;i++){
if(power(i,(p-)/,p)==p-)
return i;
}
return -;
} int solve(LL a,LL p){ if(a==)return ;
if(power(a,(p-)/,p)==p-){
return -;
}
while(a<)a+=p;
while(a>p)a-=p;
LL n=getn(p);
bool finish=false;
LL t=;
LL s=p-;
while(!finish){
s=s/;
if(s%) finish=true;
else t+=;
}
LL b=power(n,s,p);
LL _a=inverse(a,p);
LL x[];
for(LL i=;i<;i++)x[i]=;
x[t-]=power(a,(s+)/,p);
for(LL i=;i<=t-;i++){
LL judge=power((_a*x[t-i]*x[t-i])%p,normal_power(,t-i-),p);
if(judge==){
x[t-i-]=x[t-i];
}else if(judge==p-){
x[t-i-]=(power(b,normal_power(,i-),p)*x[t-i])%p;
}
}
return x[]; }
}modsqrt;
int main(){
int t;
scanf("%d",&t);
while(t--){
LL b,c;
scanf("%lld %lld",&b,&c);
LL q=b*b%MOD-*c%MOD;
q=(q+MOD)%MOD;
LL sq=modsqrt.solve(q,MOD);
if(sq==-)printf("-1 -1\n");
else{
LL xx=sq+b;
LL yy=(b-sq+MOD)%MOD;
LL x=xx*qpow(,MOD-,MOD)%MOD;
LL y=yy*qpow(,MOD-,MOD)%MOD;
if(x>y)swap(x,y);
printf("%lld %lld\n",x,y);
}
}
return ;
}

牛客多校第九场 B Quadratic equation 模平方根的更多相关文章

  1. 2019牛客多校第九场B Quadratic equation(二次剩余定理)题解

    题意: 传送门 已知\(0 <= x <= y < p, p = 1e9 + 7\)且有 \((x+y) = b\mod p\) \((x\times y)=c\mod p\) 求解 ...

  2. 牛客多校第九场 && ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解

    题意1.1: 求\(\sum_{i=1}^n Fib^m\mod 1e9+9\),\(n\in[1, 1e9], m\in[1, 1e4]\) 思路1.1 我们首先需要知道斐波那契数列的通项是:\(F ...

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

    题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(le ...

  4. 2018牛客多校第九场E(动态规划,思维,取模)

    #include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...

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

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

  6. 牛客多校第九场 J Symmetrical Painting 计算几何/扫描线

    题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积. 题解: 在随着对称轴上移的过程中,必然有一 ...

  7. 牛客多校第九场 A The power of Fibonacci 杜教bm解线性递推

    题意:计算斐波那契数列前n项和的m次方模1e9 题解: $F[i] – F[i-1] – F[i-2] = 0$ $F[i]^2 – 2 F[i-1]^2 – 2 F[i-2]^2 + F[i-3] ...

  8. 牛客多校第九场 E All men are brothers 并查集/组合论

    题意: 一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体.现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法. 题解: 认识不认识用并查集维护即可, ...

  9. 牛客多校第九场 D Knapsack Cryptosystem 背包

    题意: 给你32个物品,给定一个容积,让你恰好把这个背包装满,求出装满的方案 题解: 暴力计算的话,复杂度$2^{32}$肯定会炸,考虑一种类似bsgs的算法,先用$2^{16}$的时间遍历前一半物品 ...

随机推荐

  1. python制作坦克对战

    创建子弹类 import pygame class Bullet(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__i ...

  2. Java开发常见基础题大全

    1.&和&&的区别? &:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true. &&:短路与,如果第一个表达式为false时,第二 ...

  3. js过滤字符串中的html标签

    var str = 'add<a>daad</a><p>fsdada</p>' str.replace(/<[^<>]+>/g, ...

  4. Magento站点优化方案

    Magento 是一个开源电子商务系统,尤其以扩展性高著称,但是很高的扩展性往往是牺牲了速度为代价的,虽然现在magento为速度提升做了很多工作,但是还是没能达到人们对速度的要求.既然如此还是很自然 ...

  5. FS获取KERNEL32基址的三种方法

    FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移  说明 000  指向SEH链指针 004  线程堆栈顶部 008  线程堆栈底部 00C  SubSystemTib 010  FiberD ...

  6. 兼容软件,Wine安装,Crossover安装,

    EL6 (RHEL6 and SL6) Required packages for proper building of 32-bit Wine on 64-bit EL6 yum install - ...

  7. 第一次安装hadoop记录

    需求是:安装hadoop连接远程hadoop文件系统.JDK和hadoop需要与集群版本一致 首先去官网下载hadoop http://archive.apache.org/dist/hadoop/c ...

  8. Jeecg中通过Spring_AOP+注解方式实现日志的管理

    转载;https://blog.csdn.net/ma451152002/article/details/77234236 Jeecg中通过Spring_AOP+注解方式实现日志的管理 一.设计思路 ...

  9. 19、Linux命令对服务器内存进行监控

    国际惯例,我们要知道什么是服务器的内存,内存有哪些作用.这里就不做过多介绍,Linux性能监控需要我们对底层要有一定的理解.下面我将会列出我常用的监控内存的工具. vmstat vmstat显示关于进 ...

  10. 7_springboot2.x开发热部署

    概述:在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四种情况,如何能实现热部署. 1.模板引擎 在Spr ...