还不会 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. webpack学习遇到大坑(纯属自己记录)

    分清webpack1与webpack2区别 1.webpack2的loader不能使用简写了,否则会报如下的错 正确如下: 2.node-sass安装失败,无法下载:Cannot download h ...

  2. OAuth2 快速入门

    1 OAuth简述 OAuth 2.0 是一个授权协议,它允许软件应用代表(而不是充当)资源拥有者去访问资源拥有者的资源.应用向资源拥有者请求授权,然后取得令牌(token),并用它来访问资源,并且资 ...

  3. error: invalid command ‘bdist_wheel‘

    解决方法: pip3 install wheel 了解更多,请关注公众号

  4. 300万运算/秒 :VoltDB在电信行业基准测试上可线性扩展性能

    01 总 体 概 述 VoltDB受到全球电信软件解决方案提供商的信赖,后者将其作为首选内存数据库来驱动他们部署在全球100多家运营商处的任务关键型应用.VoltDB受到青睐的原因在于其性能和功能不仅 ...

  5. 常用-DNS

    1.1.1.1 cloudflare 1.0.0.1 119.29.29.29 腾讯 114.114.114.114 114.114.115.115 114.114.114.119财务 114.114 ...

  6. PS零基础入门教程--裁剪工具用法

    我是IT轩,分享一下我使用PS的一些用法,希望对大家有帮助!欢迎关注微信公众号:笑林新记 PS版本:PS CC 2019 主要技术:裁剪工具. 裁剪工具主要有:裁剪工具.透视裁剪工具.切片工具和切片选 ...

  7. 3.java设计模式之工厂模式

    基本需求: 一个披萨店需要订购不同种类的披萨 传统方式: 实现思路 在订购类中根据用户不同的输入直接创建不同的披萨实体类进行返回 UML类图 代码实现 披萨类 // 抽象父类 public abstr ...

  8. 安装tomcat for ubuntu linux差点没晕死我!

    我滴个神!装ubuntu的tomcat差点没有晕死我!怎么回事呢? 应该说是装好了,执行了bin/startup.sh了,出现以下画面: Using CATALINA_BASE: /home/niew ...

  9. 【JVM第七篇】执行引擎

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 执行引擎是Java虚拟机中的核心组成部分. 执行引擎的作用就是解析虚拟机字节码指令, ...

  10. C/C++中内存对齐问题的一些理解(转)

    内存对齐指令 一般来说,内存对齐过程对coding者来说是透明的,是由编译器控制完成的 如对内存对齐有明确要求,可用#pragma pack(n)指定,以n和结构体中最长数据成员长度中较小者为有效值 ...