[题解]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)的更多相关文章
- P5656 【模板】二元一次不定方程(exgcd)
还不会 exgcd 的请移步窝的学习笔记,这里只讲怎么搞出烦人的答案. 在 \(a,b\) 两者互质的情况下,二元一次不定方程的通解:\(a(x+db)+b(y+da)=c\). 所以要先将 \(a, ...
- poj 2115 二元一次不定方程
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14765 Accepted: 3719 Descr ...
- poj 1061 青蛙的约会(二元一次不定方程)
Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...
- exgcd、二元一次不定方程学习笔记
(不会LATEX,只好用Word) ( QwQ数论好难) 再补充一点,单次询问a,b求逆元的题可以直接化简然后套用exgcd求解. 例题:https://www.luogu.org/problemne ...
- uva 10090 二元一次不定方程
Marbles Input: standard input Output: standard output I have some (say, n) marbles (small glass ball ...
- 洛谷 P4774 / loj 2721 [NOI2018] 屠龙勇士 题解【同余】【exgcd】【CRT】
推导过程存在漏洞+exCRT板子没打熟于是期望得分÷实际得分=∞? 题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\sim n\) 顺序杀掉 \(n\ ...
- 洛谷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 ...
- 【模板】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 ...
- 字符串 kmp算法 codeforce 625B 题解(模板)
题解:kmp算法 代码: #include <iostream>#include <algorithm>#include <cstring>#include < ...
- 全局最小割模板(定S,不定T,找最小割)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
随机推荐
- 【中英】【吴恩达课后测验】Course 3 -结构化机器学习项目 - 第二周测验
[中英][吴恩达课后测验]Course 3 -结构化机器学习项目 - 第二周测验 - 自动驾驶(案例研究) 上一篇:[课程3 - 第一周测验]※※※※※ [回到目录]※※※※※下一篇:[课程4 -第一 ...
- [nodejs原型链污染及绕过]校赛第四次纳新赛 bypass WP
前言 赛后自学了nodejs原型链污染后来尝试做这个题,难度不算太大,但是绕过姿势非常奇怪没见过,写一篇总结记录一下做法 wp 首先打开环境发现是一个登录框,题目有附件我们下载查看附件 最关键的就是c ...
- 【Zookeeper从入门到实战】SpringBoot整合完整指南
Zookeeper从入门到实战:SpringBoot整合完整指南 一.Zookeeper概述 1.1 什么是Zookeeper Zookeeper是一个开源的分布式协调服务,由Apache软件基金会维 ...
- WineHQ 发布的 Framework Mono 6.14 的这个特性对Windows Forms 用户来说肯定很感兴趣
微软于 2024年8月 将 Mono 项目所有权正式捐赠给 WineHQ 组织,标志着该项目进入开源社区主导的新阶段,WineHQ 在 2025年3月8日 发布了接管后的首个版本 Framework ...
- vue中使用axios获取到的Promise {<pending>}数据,无法使用的问题
使用axios拿到后端数据后 返回的是 Promise {} 我们可以看到数据是在[[PromiseResult]]这个Object对象中 此时我们是无法获取对象的 解决方法:使用async和awai ...
- Selenui + Cucumber framwork structure
- 证明:C++ std::shared_ptr的引用不会增加它的计数值
#include <thread> #include <memory> #include <Windows.h> int main() { std::thread ...
- 【闲话 No.5】 FFT 与 NTT 基础
门的另一端 可爱得很有力量的歌,丘丘人的部分感觉好听炸了. 偶然推开的那一扇门 从何时起变得不再陌生 对面有人 可爱地等 在遇见你的这个世界 时针似乎转得要比平时快些 天空 更清澈了一些 相遇的理由 ...
- HZOI NOIP 2024 Round 24 T2 取石子 官方做法
发现大多数的题解都是不同于官方题解的做法,这里我将介绍官方题解做法. Solution 证明先手是否可以必胜的方法相差无几,为了方便后边行文,这里介绍我的思路:考虑各堆石子和为奇数的情况(以下简称为& ...
- C#:wpf ui 4.0 是如何实现页面导航的?
wpf ui 介绍 wpf ui 是一款我比较喜欢的wpf ui界面开源库,目前已经获得了8.5颗stars,还是很受欢迎的: wpf ui在vs中也提供了快速开发模板: 让wpf开发者可以快速进行应 ...