Quadratic equation
2024-09-05 20:19:58
牛客多校九B
给定
$(x+y)\%mod=b$
$(x*y)\%mod=c$
求 $x,y$
二次剩余
求$((x-y)^{2})\%mod = (b\times b-4\times c)\%mod$
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=;
ll qp(ll a, ll b, ll c)
{
ll ans = ;
while (b)
{
if (b % == )ans = (ans*a) % c;
b /= ;
a = (a*a) % c;
}
return ans;
} ll p=mod;
ll w;//二次域的D值
bool ok;//是否有解 struct QuadraticField//二次域
{
ll x, y;
QuadraticField operator*(QuadraticField T)//二次域乘法重载
{
QuadraticField ans;
ans.x = (this->x*T.x%p + this->y*T.y%p*w%p) % p;
ans.y = (this->x*T.y%p + this->y*T.x%p) % p;
return ans;
}
QuadraticField operator^(ll b)//二次域快速幂
{
QuadraticField ans;
QuadraticField a = *this;
ans.x = ;
ans.y = ;
while (b)
{
if (b & )
{
ans = ans*a;
b--;
}
b /= ;
a = a*a;
}
return ans;
}
}; ll Legender(ll a)//求勒让德符号
{
ll ans=qp(a, (p - ) / , p);
if (ans + == p)//如果ans的值为-1,%p之后会变成p-1。
return -;
else
return ans;
} ll Getw(ll n, ll a)//根据随机出来a的值确定对应w的值
{
return ((a*a - n) % p + p) % p;//防爆处理
} ll solve(ll n)
{
ll a;
if(n==)
return ;
if (p == )//当p为2的时候,n只会是0或1,然后0和1就是对应的解
return n;
if (Legender(n) == -)//无解
ok = false;
srand((unsigned)time(NULL));
while ()//随机a的值直到有解
{
a = rand()%p;
w = Getw(n, a);
if (Legender(w) == -)
break;
}
QuadraticField ans,res;
res.x = a;
res.y = ;//res的值就是a+根号w
ans = res ^ ((p + ) / );
return ans.x;
} int main()
{
ll q;
scanf("%lld",&q);
ll a,b,n,ans1,ans2;
ll inv2=qp(,mod-,mod);
while (q--)
{ scanf("%lld%lld",&a,&b); ok = true;
n=(a*a%mod-*b%mod+mod)%mod; ans1 = solve(n); ans2 = p - ans1;//一组解的和是p
if (!ok)
{
cout<<-<<' '<<-<<'\n';
}
else
{
ll x=(ans1+a)%p*inv2%p;
ll y=(a-x+p)%p;
printf("%lld %lld\n", min(x,y),max(x,y) );
}
}
}
最新文章
- LineNumberReader类
- LIS LCS n^2和nlogn解法 以及LCIS
- 如何获取、下载、安装fortran编译工具ifort
- Ubuntu_14.04安装docker
- cygwin下安装hadoop0.20
- C#后台跳转
- mysql 索引B-Tree类型对索引使用的生效和失效情况详解
- Vue.js的从入门到放弃进击录(一)
- Python资料汇总(建议收藏)
- c++ 文件操作详解
- 要搞刷机!从它的尸体上踏过去!钢板云路由!WPR003N复活!成功启动OPENWRT
- 第二次JAVA作业
- Java小知识点总结
- WEB安全:Tomcat 只可通过域名访问,禁止通过 IP 访问
- WIN7系统怎样增加C盘空间
- 特殊符号 UNICODE编码
- b-树和b+树以及mysql索引
- 密码加密MD5,Bash64
- iphone6设置企业qq
- CentOS系统初始化---不断更新中