牛客多校第九场 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}$的时间遍历前一半物品 ...
随机推荐
- 批量更新数据(BatchUpdate)
批量更新数据(BatchUpdate) /// <summary> /// 批量更新数据,注意:如果有timestamp列,要移除 /// </summary> /// < ...
- Robot Framework:环境安装
Windows Python2.7 前置条件:安装python2.7,下载地址:https://www.p ...
- DNS稳定保障系列1--服务双保障“辅助DNS”产品介绍
背景 2016 年 10 月 21 日,DNS 服务商 dyn 的服务器遭遇黑客大流量的 ddos 攻击,使得美国大量互联网公司如 twitter,github等都出现解析失败,无法提供服务.如下图可 ...
- $\mathcal{CSP-S}$,私は来ています
记事本 开个坑.背包dp我是真的一点也不会了... NOIP2014飞扬的小鸟 NOIP2018货币系统 11-4:$Countdown$ $to$ $the$ $tenth$ $day$ 上午 困的 ...
- EL表达式的简单介绍
EL表达式的简单介绍 一.JSP EL语言定义 E L(ExpressionLanguage) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于ECMAScript 和 XPath 表达式 ...
- SpringBoot中配置不序列化返回值为null的属性
package com.weiresearch.properties; import com.fasterxml.jackson.annotation.JsonInclude;import com.f ...
- 4种xml解析器区别
XML作用:不同应用之间的通信和数据共享 Dom遍历法:对内存消耗大,容易内存溢出 SAX方法:事件驱动模式,缺点 不易操作,很难同时访问多处不同数据,对内存消耗不大,速度快 jdom方法: dom4 ...
- python re模块使用
re.findall() 查找字符 从字符串中找出符合模式的字符序列:findall(模式(正则表达式),目标字符串), 返回值为list类型,list元素为匹配出的各个字符串如: import re ...
- scrapy主要防止封IP策略
scrapy如果抓取太频繁了,就被被封IP,目前有以下主要策略保证不会被封: 策略1:设置download_delay下载延迟,数字设置为5秒,越大越安全 策略2:禁止Cookie,某些网站会通过Co ...
- git分布式版本控制系统权威指南学习笔记(四):git reset
文章目录 git reset目录树重写 git reset 重置 git reset目录树重写 git reset --soft 暂存区工作区不变 git reset --hard git reset ...