P5656 【模板】二元一次不定方程 (exgcd)

若存在\(ax+by=c\),则可以根据特解\(x,y\)求出任意通解\(x',y'\):

\(\begin{cases}
x'=x+k*\frac{b}{\gcd(a,b)}\\
y'=y-k*\frac{a}{\gcd(a,b)}
\end{cases}(k\in \mathbb{Z})\)

求特解的方法是「扩展欧几里得(exgcd)」,如果没接触过可以先阅读此文或搜索更多信息。

该方程有整数解当且仅当\(\gcd(a,b)|c\)。所以不满足直接输出-1

接下来考虑怎么求通解。

首先,exgcd求出来的结果是\(ax+by=\gcd(a,b)\),我们要满足\(ax+by=c\),必须先把\(x,y\)都乘\(\frac{c}{\gcd(a,b)}\)。

然后,我们知道\(k\)有一个取值范围,这个范围内每个\(k\)都对应一组解。我们只需要算出\(x',y'>0\)时\(k\)的取值范围,一切就好弄了。

记\(\frac{b}{\gcd(a,b)}=r,\frac{a}{\gcd(a,b)}=s\)。则:

  • \(x'>0\iff x+kr>0\iff k>-\frac{x}{r}\),故\(k\)的最小值\(mink=\lfloor -\frac{x}{r}\rfloor+1\)。
  • \(y'>0\iff y-ks>0\iff k<\frac{y}{s}\),故\(k\)的最大值\(maxk=\lceil \frac{y}{s}\rceil-1\)。

如果\(mink>maxk\),说明有整数解但没有正整数解,输出\(2\)个值:

  • \(x\)最小值:\(x+mink*r\)。
  • \(y\)最小值:\(y-maxk*s\)。

否则说明有整数解,需要输出\(5\)个值:

  • 个数:\(maxk-mink+1\)。
  • \(x\)最小值:\(x+mink*r\)。
  • \(y\)最小值:\(y-maxk*s\)。
  • \(x\)最大值:\(x+maxk*r\)。
  • \(y\)最大值:\(y-mink*s\)。

注意:开long long

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,a,b,c;
int exgcd(int a,int b,int& x,int& y){
int d;
if(b==0) x=1,y=0,d=a;
else d=exgcd(b,a%b,y,x),y-=a/b*x;
return d;
}
signed main(){
cin>>t;
int x,y;
while(t--){
cin>>a>>b>>c;
int gcd=exgcd(a,b,x,y);
if(c%gcd!=0){
cout<<"-1\n";
continue;
}
int stepx=b/gcd,stepy=a/gcd;
x*=c/gcd,y*=c/gcd;
int mink=floor(-1.0*x/stepx)+1,maxk=ceil(1.0*y/stepy)-1;
if(mink>maxk){
cout<<x+mink*stepx<<" "<<y-maxk*stepy<<"\n";
}else{
cout<<maxk-mink+1<<" ";
cout<<x+mink*stepx<<" "<<y-maxk*stepy<<" ";
cout<<x+maxk*stepx<<" "<<y-mink*stepy<<"\n";
}
}
return 0;
}

[题解]P5656 【模板】二元一次不定方程 (exgcd)的更多相关文章

  1. P5656 【模板】二元一次不定方程(exgcd)

    还不会 exgcd 的请移步窝的学习笔记,这里只讲怎么搞出烦人的答案. 在 \(a,b\) 两者互质的情况下,二元一次不定方程的通解:\(a(x+db)+b(y+da)=c\). 所以要先将 \(a, ...

  2. poj 2115 二元一次不定方程

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14765   Accepted: 3719 Descr ...

  3. poj 1061 青蛙的约会(二元一次不定方程)

      Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...

  4. exgcd、二元一次不定方程学习笔记

    (不会LATEX,只好用Word) ( QwQ数论好难) 再补充一点,单次询问a,b求逆元的题可以直接化简然后套用exgcd求解. 例题:https://www.luogu.org/problemne ...

  5. uva 10090 二元一次不定方程

    Marbles Input: standard input Output: standard output I have some (say, n) marbles (small glass ball ...

  6. 洛谷 P4774 / loj 2721 [NOI2018] 屠龙勇士 题解【同余】【exgcd】【CRT】

    推导过程存在漏洞+exCRT板子没打熟于是期望得分÷实际得分=∞? 题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\sim n​\) 顺序杀掉 \(n​\ ...

  7. 洛谷P3807 【模板】卢卡斯定理exgcd

    题目背景 这是一道模板题. 题目描述 给定n,m,p(1\le n,m,p\le 10^51≤n,m,p≤105 ) 求 C_{n+m}^{m}\ mod\ pCn+mm​ mod p 保证P为pri ...

  8. 【模板】gcd和exgcd

    1. gcd: int gcd(int a,int b) { return !b?a:gcd(b,a%b); } exgcd: int exgcd(int a,int b,int& x,int ...

  9. 字符串 kmp算法 codeforce 625B 题解(模板)

    题解:kmp算法 代码: #include <iostream>#include <algorithm>#include <cstring>#include < ...

  10. 全局最小割模板(定S,不定T,找最小割)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...

随机推荐

  1. 【中英】【吴恩达课后测验】Course 3 -结构化机器学习项目 - 第二周测验

    [中英][吴恩达课后测验]Course 3 -结构化机器学习项目 - 第二周测验 - 自动驾驶(案例研究) 上一篇:[课程3 - 第一周测验]※※※※※ [回到目录]※※※※※下一篇:[课程4 -第一 ...

  2. [nodejs原型链污染及绕过]校赛第四次纳新赛 bypass WP

    前言 赛后自学了nodejs原型链污染后来尝试做这个题,难度不算太大,但是绕过姿势非常奇怪没见过,写一篇总结记录一下做法 wp 首先打开环境发现是一个登录框,题目有附件我们下载查看附件 最关键的就是c ...

  3. 【Zookeeper从入门到实战】SpringBoot整合完整指南

    Zookeeper从入门到实战:SpringBoot整合完整指南 一.Zookeeper概述 1.1 什么是Zookeeper Zookeeper是一个开源的分布式协调服务,由Apache软件基金会维 ...

  4. WineHQ 发布的 Framework Mono 6.14 的这个特性对Windows Forms 用户来说肯定很感兴趣

    微软于 2024年8月 将 Mono 项目所有权正式捐赠给 WineHQ 组织,标志着该项目进入开源社区主导的新阶段,WineHQ 在 2025年3月8日 发布了接管后的首个版本 Framework ...

  5. vue中使用axios获取到的Promise {<pending>}数据,无法使用的问题

    使用axios拿到后端数据后 返回的是 Promise {} 我们可以看到数据是在[[PromiseResult]]这个Object对象中 此时我们是无法获取对象的 解决方法:使用async和awai ...

  6. Selenui + Cucumber framwork structure

  7. 证明:C++ std::shared_ptr的引用不会增加它的计数值

    #include <thread> #include <memory> #include <Windows.h> int main() { std::thread ...

  8. 【闲话 No.5】 FFT 与 NTT 基础

    门的另一端 可爱得很有力量的歌,丘丘人的部分感觉好听炸了. 偶然推开的那一扇门 从何时起变得不再陌生 对面有人 可爱地等 在遇见你的这个世界 时针似乎转得要比平时快些 天空 更清澈了一些 相遇的理由 ...

  9. HZOI NOIP 2024 Round 24 T2 取石子 官方做法

    发现大多数的题解都是不同于官方题解的做法,这里我将介绍官方题解做法. Solution 证明先手是否可以必胜的方法相差无几,为了方便后边行文,这里介绍我的思路:考虑各堆石子和为奇数的情况(以下简称为& ...

  10. C#:wpf ui 4.0 是如何实现页面导航的?

    wpf ui 介绍 wpf ui 是一款我比较喜欢的wpf ui界面开源库,目前已经获得了8.5颗stars,还是很受欢迎的: wpf ui在vs中也提供了快速开发模板: 让wpf开发者可以快速进行应 ...