题目传送门

题意: 给定不定方程ax+by=c。

若该方程无整数解,输出 -1
若该方程有整数解,且有正整数解,则输出其正整数解的数量,所有正整数解中 x 的最小值,所有正整数解中 y 的最小值,所有正整数解中 x 的最大值,以及所有正整数解中 y 的最大值
若方程有整数解,但没有正整数解,你需要输出所有整数解中 x 的最小正整数值, y 的最小正整数值

正整数解即为 x,y。x,y 均为正整数的解, 0 不是正整数
整数解即为 x,y,x,y 均为整数的解
x 的最小正整数值即所有 x 为正整数的整数解中 x 的最小值,y 同理。

思路 exgcd。。代码后有注释里。

#include<bits/stdc++.h>
#define endl '\n'
#define null NULL
#define ls p<<1
#define rs p<<1|1
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll long long
#define int long long
#define vi vector<int>
#define mii map<int,int>
#define pii pair<int,int>
#define ull unsigned long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ct cerr<<"Time elapsed:"<<1.0*clock()/CLOCKS_PER_SEC<<"s.\n";
char *fs,*ft,buf[1<<20];
#define gc() (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<20,stdin),fs==ft))?0:*fs++;
inline int read(){int x=0,f=1;char ch=gc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=gc();}
return x*f;}
using namespace std;
const int N=2e5+5;
const int inf=0x7fffffff;
const int mod=1e9+7;
const double eps=1e-6;
int gcd(int a,int b)
{return b?gcd(b,a%b):a;
}
void exgcd(int a,int b,int &x,int &y)//exgcd模板
{if(!b){x=1;y=0;return ;}exgcd(b,a%b,x,y);int tmp=x;x=y;y=tmp-a/b*y;return ;
}
signed main()
{int t;cin>>t;while(t--){int a,b,c;a=read();b=read();c=read();if(c%gcd(a,b)!=0)//裴蜀定理,无解的情况{cout<<-1<<endl;continue;}int x,y;int g=gcd(a,b);a/=g;b/=g;c/=g;exgcd(a,b,x,y);//求ax+by=1时,x,y的一个特解x*=c;y*=c;//ax+by=c的解int rx,ry;if(x>0&&x%b!=0)//通解是x+k*b,证明可以搜rx=x%b;//最小正整数解elserx=x%b+b;if(y>0&&y%a!=0)ry=y%a;elsery=y%a+a;int mx=(c-b*ry)/a,my=(c-a*rx)/b;//最大正整数解是当另一个最小int cnt=0;if(mx>0&&my>0)//正整数解的个数{cnt=(mx-rx)/b+1;}if(cnt)cout<<cnt<<' '<<rx<<' '<<ry<<' '<<mx<<' '<<my<<endl;elsecout<<rx<<' '<<ry<<endl;}
}

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

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

    先给出代码再说细节吧 #include<bits/stdc++.h> using namespace std; #define ll long long #define LOCALll e ...

  2. 二元一次不定方程的整数解(扩展欧几里得算法)

    二元一次不定方程的整数解(扩展欧几里得算法) (不得不说这是一堂数学*信竞课) 整数解解法 c(mod b)或ax+by=c有整数解当且仅当(a,b)|c 一般意义下的解法: 欧拉函数 扩展欧几里得算 ...

  3. 初等数论--同余方程--二元一次不定方程的通解形式

    初等数论--同余方程--二元一次不定方程的通解形式 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数 ...

  4. c语言不定方程的二元一次,poj1061 - 同余方程,二元一次不定方程

    以前不会解二元一次不定方程的时候不会做,现在会做了. #include #include using namespace std; typedef __int64 int64; void solveT ...

  5. 如何求解二元一次不定方程的整数解

    这里讨论的二元一次不定方程专指ax+by=c(a*b≠0,a,b,c∈Z)-----① 定理一: 方程①有整数解的充分必要条件是(a,b)|c((a,b)即Gcd(a,b),下同) 定理二(裴蜀定理) ...

  6. C++ 二元一次不定方程巧妙求解——运用扩展欧几里得算法

    前言 在关于数论的学习中,求解二元一次不定方程是很重要的,在学习求解二元一次不定方程之前,要先了解欧几里得算法和扩展欧几里得算法. 关于数论的学习 欧几里得算法 欧几里得算法就是辗转相除法,欧几里得算 ...

  7. 二元一次不定方程的整数解

    先来看看一个典型的二元一次不定方程: a x + b y − c = 0 a , b , c ∈ z x , y ∈ z ax+by-c=0\\ a,b,c\in\mathbb{z}\\x,y\in\ ...

  8. 二元一次不定方程的快速解法

    二元一次不定方程(形如 a * x + b * y = c的方程,又叫丢番图方程,下简称不定方程),是初等数论经典的研究对象.二元一次不定方程应用广泛,如经典的找换问题和装箱问题(下面我将通过一系列的 ...

  9. 二元一次不定方程的解法

    二元一次不定方程的解法 时间:2008-12-17 14:47 点击: 147次 我们知道,如果未知数的个数多于方程的个数,那么,一般来说,它的解往往是不确定的,例如方程 x-2y=3, 方程组 等, ...

最新文章

  1. 【内网福音】如何离线部署Rancher
  2. 之江杯2020零样本目标分割题参赛总结
  3. Linux统治超级计算领域的九个理由
  4. 【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题
  5. UML 10 种常见的域建模错误
  6. 随想录(gcc生成的中间语言、汇编代码)
  7. FCFS,SJF,HRRN调度算法
  8. python里的collections模块
  9. 火柴Open Day,你永远不知道你错过了什么!!
  10. nod找不到服务器,Nodejs服务器:无法加载资源:服务器响应状态为404(未找到)...
  11. 《数学之美》—余弦定理和新闻的分类
  12. html做一个课程表
  13. pytorch 语⾔模型数据集(周杰伦专辑歌词)数据集 免费
  14. 211大学计算机找工作,华为最青睐的5所大学,每年招聘大量毕业生,第一所只是211院校...
  15. 芝诺数解|「十三」一菜一格,百菜百味——重庆川菜数据分析报告
  16. 数字验证的正则表达式
  17. 基于加密短信验证码的蓝牙智能锁设计
  18. 服务器文档链接电脑,服务器怎么链接电脑
  19. 酒吧类型与其娱乐项目设置
  20. Hadoop,master和slave简单的分布式搭建

热门文章

  1. 成功入职阿里后,我总结了这3大求职经验
  2. Android - RxEasyHttp网络库请求数据
  3. zblog include html页面,龙三公子博客-Zblog添加自定义页面调用footer和header
  4. mysql数据库中只能插入数字,不能插入中英文
  5. 过滤器-过滤敏感词汇
  6. JAVA大作业——网络在线对战游戏——坦克大战
  7. 关于IE图标的删除。劫持
  8. GAMES104-如何构建游戏世界
  9. HAL库内部flash及IAP(boot)升级
  10. XSS 进阶篇:一文全面了解蓝莲花基本用法