还不会 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)的更多相关文章

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

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

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

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

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

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

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

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

  5. 洛谷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 ...

  6. 【模板】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 ...

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

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

  8. 奇异值分解(SVD)和最小二乘解在解齐次线性超定方程中的应用

    奇异值分解,是在A不为方阵时的对特征值分解的一种拓展.奇异值和特征值的重要意义相似,都是为了提取出矩阵的主要特征. 对于齐次线性方程 A*X =0;当A的秩大于列数时,就需要求解最小二乘解,在||X| ...

  9. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

随机推荐

  1. SpringBoot第二集:注解与配置(2020最新最易懂)

    2020最新SpringBoot第二集:基础注解/基础配置(2020最新最易懂) 一.Eclipse安装SpringBoot插件 Eclipse实现SpringBoot开发,为便于项目的快速构建,需要 ...

  2. DM存储过程示例子-表的行数对比

    1.DM存储过程示例子,表的行数对比 1 --1. ================全量 2 --select * from DM_VERI where c2 != c3; 3 --drop tabl ...

  3. Python彩蛋、字典、列表高级用法、元类、混入、迭代器、生成器、生成式、git

    一.类与类的关系 关注公众号"轻松学编程"了解更多. is-a 继承 继承是指一个类(称为子类.子接口)继承另外一个类(称为父类.父接口)的功能, 并可以增加它自己的新功能的能力. ...

  4. 第4章 Function语意学

    第4章 Function语意学 目录 第4章 Function语意学 4.1 Member的各种调用方式 Nonstatic Member Function(非静态成员函数) virtual Memb ...

  5. Oracle数据库系统结构(一) 

    1.Oracle数据库系统结构概述 Oracle数据库由存放在磁盘上的数据库(DB)和对磁盘上的数据库进行管理的数据库管理系统(DBMS)两部分构成,分别对应着数据库的存储结构和软件结构. Oracl ...

  6. spark推测机制及参数设置

    推测执行机制 推测任务是指对于一个Stage里面拖后腿的Task,会在其他节点的Executor上再次启动这个task,如果其中一个Task实例运行成功则将这个最先完成的Task的计算结果作为最终结果 ...

  7. js给多级复杂动态变量赋值

    1 function SetVal(field, val) { 2 var arr = field.split("."); 3 var str = arr[0]; 4 if (wi ...

  8. mysql之优化器、执行计划、简单优化

    mysql之优化器.执行计划.简单优化 2018-12-12 15:11 烟雨楼人 阅读(794) 评论(0) 编辑 收藏 引用连接: https://blog.csdn.net/DrDanger/a ...

  9. linux之DHCP服务

    1.DHCP介绍(动态主机配置协议)  DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议, 主要用途:给内部网络或网络服务供应 ...

  10. ceph扩展bluestore的db分区

    前言 在ceph 14版本里面才加入了bluefs-bdev-migrate,分区迁移相关的命令,那么在12版本里面其实也是可以扩展分区的 测试的版本 [root@lab102 ceph-0]# ce ...