牛客多校第九场 B Quadratic equation 模平方根
题意:
已知
$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 模平方根的更多相关文章
- 2019牛客多校第九场B Quadratic equation(二次剩余定理)题解
题意: 传送门 已知\(0 <= x <= y < p, p = 1e9 + 7\)且有 \((x+y) = b\mod p\) \((x\times y)=c\mod p\) 求解 ...
- 牛客多校第九场 && 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 ...
- Cutting Bamboos(2019年牛客多校第九场H题+二分+主席树)
题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(le ...
- 2018牛客多校第九场E(动态规划,思维,取模)
#include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...
- 2019牛客多校第九场AThe power of Fibonacci——扩展BM
题意 求斐波那契数列m次方的前n项和,模数为 $1e9$. 分析 线性递推乘线性递推仍是线性递推,所以上BM. 由于模数非质数,上扩展版的BM. 递推多少项呢?本地输入发现最大为与前57项有关(而且好 ...
- 牛客多校第九场 J Symmetrical Painting 计算几何/扫描线
题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积. 题解: 在随着对称轴上移的过程中,必然有一 ...
- 牛客多校第九场 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] ...
- 牛客多校第九场 E All men are brothers 并查集/组合论
题意: 一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体.现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法. 题解: 认识不认识用并查集维护即可, ...
- 牛客多校第九场 D Knapsack Cryptosystem 背包
题意: 给你32个物品,给定一个容积,让你恰好把这个背包装满,求出装满的方案 题解: 暴力计算的话,复杂度$2^{32}$肯定会炸,考虑一种类似bsgs的算法,先用$2^{16}$的时间遍历前一半物品 ...
随机推荐
- J2EE学习篇之--JDBC详解
今天我们来说一下关于JDBC的相关知识,关于JDBC我想大家都不陌生了,而且我记得早就开始使用它了,记得那是大二的时候做课程设计,但是那时候是为了完成任务,所以遇到问题就google,那时候也没有时间 ...
- js委托事件-addEventListeners(冒泡方向)
JQuery中live().delegate().on()事件都能给新增元素绑定事件,原理就是用了事件委托. 实例: 给id为div的元素绑定一个click委托,如果冒泡上来的元素是P元素就会执行al ...
- CPU指令集的虚拟化(x86)
IA-32 (x86)[edit] Main article: X86 virtualization The IA-32 instruction set of the Pentium processo ...
- The 2019 Asia Nanchang First Round Online Programming Contest(B,E)
B. Fire-Fighting Hero 题意:一个消防员和多个队伍比赛,比较所有地方的最短路的最大值,消防员最后的值要乘1/C,求胜利的一方的最短路的最大值是多少.一直没读懂正确题意(内疚). 思 ...
- 反射与类加载之反射基本概念与Class(一)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述反射与类加载: [三种获取Class对象的方式] [ ...
- python+tushare获取股票每日停复牌信息
接口:suspend 更新时间:不定期 描述:获取股票每日停复牌信息 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称 | 类型 | 必 ...
- Pytest初体验
Pytest安装,导入相关依赖哭 Pip3 install –U pytest U表示升级 Pip3 install pytestsugar pip3 install pytest-rerunfail ...
- 利用dynamic解决匿名对象不能赋值的问题
原文:利用dynamic解决匿名对象不能赋值的问题 关于匿名对象 匿名对象是.Net Framework 3.0提供的新类型,例如: }; 就是一个匿名类,搭配Linq,可以很灵活的在代码中组合数据, ...
- 建站租用RAKsmart服务器的优势
RAKsmart算是近年来受国内用户关注度颇高的美国服务器提供商.位于美国西海岸加州地区的RAKsmart机房,拥有超过十年的机房管理经验,提供了快速.稳定的服务器租用服务.那么RAKsmart服务器 ...
- nodejs 模板引擎ejs的简单使用(3)
1.ejs <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...