P5656 【模板】二元一次不定方程(exgcd)
还不会 exgcd 的请移步窝的学习笔记,这里只讲怎么搞出烦人的答案。
在 \(a,b\) 两者互质的情况下,二元一次不定方程的通解:\(a(x+db)+b(y+da)=c\)。
所以要先将 \(a,b\) 除以 \(\gcd(a,b)\)。
判定是否有解不多说,考虑有正整数解怎么判。
对于未知数 \(x,y\),在其中一个满足条件的同时我们希望另一个尽可能大。仔细观察数据范围,发现 \(a,b,c\) 均为正整数,也就是说随着 \(x\) 的增大 \(y\) 会减小,那我们将一个取最小正整数解另一个算一下是否大于 \(0\) 即可。
然后很容易看出一个的最小正整数解就是另一个的最大正整数解。
记得开 long long,解记得在一开始乘上 \(c/\gcd(a,b)\)。
时间复杂度 \(O(T\log a)\)~
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int x,y;
int read()
{
int A;
bool K;
char C;
C=A=K=0;
while(C<'0'||C>'9')K|=C=='-',C=getchar();
while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
return(K?-A:A);
}
void exgcd(int a,int b)
{
if(!a)
{
x=0;
y=1;
return;
}
int tmp;
exgcd(b%a,a);
tmp=y;
y=x;
x=tmp-b/a*x;
}
int gcd(int _,int __)
{
return(!_?__:gcd(__%_,_));
}
void write(int X)
{
if(X<0)putchar('-'),X=-X;
if(X>9)write(X/10);
putchar(X%10|48);
}
signed main()
{
int t,a,b,c,k;
t=read();
while(t--)
{
a=read(),b=read(),c=read();
k=gcd(a,b);
if(c%k)
{
puts("-1");
continue;
}
exgcd(a,b);
c/=k;
x*=c;
y*=c;
a/=k;
b/=k;
x=(!((x%b+b)%b)?b:(x%b+b)%b);
y=(c-x*a)/b;
if(y>0)
{
write((y-1)/a+1);
putchar(' ');
write(x);
putchar(' ');
y=(!(y%a)?a:y%a);
write(y);
putchar(' ');
x=(c-y*b)/a;
write(x);
putchar(' ');
write((c-(!(x%b)?b:x%b)*a)/b);
}
else
{
write(x);
putchar(' ');
write((!((y%a+a)%a)?a:(y%a+a)%a));
}
putchar('\n');
}
return 0;
}
P5656 【模板】二元一次不定方程(exgcd)的更多相关文章
- 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 ...
- 洛谷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 ...
- 全局最小割模板(定S,不定T,找最小割)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
- 奇异值分解(SVD)和最小二乘解在解齐次线性超定方程中的应用
奇异值分解,是在A不为方阵时的对特征值分解的一种拓展.奇异值和特征值的重要意义相似,都是为了提取出矩阵的主要特征. 对于齐次线性方程 A*X =0;当A的秩大于列数时,就需要求解最小二乘解,在||X| ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
随机推荐
- LuoguP4704 太极剑
题面 测试要求 Bob 尽可能快地切断 n 根绳子. 所有绳子的端点两两不同,所以共有 2n 个端点.这些端点被捆在一个圆上,等距离分布.我们把这些端点按顺时针方向编号为 1 到 2n. Bob 每次 ...
- Java学习的第六天
1.今天学习了各种运算符, 还有选择结构,循环结构 2.今天学习没有遇到困难. 3.明天学习数组和第三章的开头一部分.
- Spring创建Bean的过程Debug
目录 Spring流程Debug 1.1 Spring测试环境搭建 1.2 Debug容器创建过程 1.3 AbstractApplicationContext的refresh()包含的13个方法分析 ...
- jetson-reference编译出现的问题记录
问题一: 显示gcc版本过高,需要安装低版本的gcc.g++ sudo apt-get install -y gcc-4.9 sudo apt-get install -y g++-4.9 cd /u ...
- 谈谈对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)
一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...
- MySql索引使用策略
MySql索引 索引优点 1.可以通过建立唯一索引或者主键索引,保证数据的唯一性.2.提高检索的数据性能3.在表连接的连接条件 可以加速表与表直接的相连 4.建立索引,在查询中使用索引 可以提高性能 ...
- Linux下端口被占用,关掉端口占用的方法
Linux下端口被占用(例如端口3000),关掉端口占用的进程的方法: 1.netstat -tln | grep 3000 2.sudo lsof -i:3000 3.sudo kill -9 进程
- 1,github更新问题
赶去吃饭,不排版了. 一:上传 1,新建仓库 通过下面代码克隆仓库到本地: git clone https://github.com/ndnmonkey/zhihu.git 把文件放到克隆到本地的文件 ...
- 334. Increasing Triplet Subsequence(也可以使用dp动态规划)
Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...
- ceph的rbd备份软件ceph-backup
teralytics是一家国外的大数据公司,这个是他们开源的ceph的备份的工具,在twitter上搜索相关信息的时候看到,觉得不错就拿来试用一番 这是个什么软件 一个用来备份 ceph 的 rbd ...