解一元二次不定方程

本文搬运自本人高中时期CSDN博客,若图片加载不出来,可到原文查看:https://blog.csdn.net/zhangtingxiqwq/article/details/132385405

https://www.luogu.com.cn/problem/P5656

求解:

在这里插入图片描述

  1. 有解 充要 条件:令 d=gcd(a,b),cmodd=0d=\gcd(a,b),c\bmod d=0

  2. exgcd,背吧

1
2
3
4
5
6
7
8
9
10
int exgcd(int a, int b, int &x, int &y) {
int d=a;
if(b==0) x=1, y=0;
else {
d=exgcd(b, a%b, y, x);
y-=a/b*x;
}
return d;
}

  1. 合法解:令 t=c/dt=c/d ,使 x=x×t,y=y×tx=x\times t,y=y\times t

  2. 任意解:令 p=b/d,q=a/dp=b/d,q=a/d ,则 x=x+kp,y=ykqx=x+kp,y=y-kq

然后剩下就是奇怪判断了

在这里插入图片描述

例题:ABC315G

https://atcoder.jp/contests/abc315/tasks/abc315_g

x,yx,y 的范围变成 [1,n][1,n]

在这里插入图片描述

写的时候都不想看,反正到时候多手推,多判断,多拍拍即可

多对拍,个人感觉挺好拍的