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 ...
随机推荐
- Azure Data Factory(一)入门简介
一,引言 今天分享一个新的Azure 服务-----Azure Data Factory(Azure 数据工厂),怎么理解,参考根据官方解释-----数据工厂解释:大数据需要可以启用协调和操作过程以将 ...
- 【ELK】Centos7 安装 ELK 7.6.2 和 UI 管理界面以及测试例子
1. 初始化环境 1.0 初始化环境官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config ...
- 阅读源码,通过LinkedList回顾基础
目录 前言 类签名 泛型 Serializable和Cloneable Deque List和AbstractList RandomAccess接口(没实现) 变量 构造函数 常用方法 List体系下 ...
- Pycharm快捷键与基本使用方法
pycharm常用快捷键设置 关注公众号"轻松学编程"了解更多. 可在file->settings->keymap中查找关键字然后修改快捷键 1.多行编辑 ALT+鼠标 ...
- vue脚手架项目搭建失败
可能是ssl 的问题 解决办法: 1. npm config set strict-ssl false 2. npm install -g supervisor 以上完成后vue ui 或vue cr ...
- 红帽6.9搭建yum源的2种方式(HTTP和本地)
方式一:HTTP搭建 1.首先删除本身所带的yum `rpm -qa | grep yum | xargs rpm -e --nodeps ` #忽略依赖关系,强行删除 若出现 错误出现 将后面的 ...
- 简单入门Rabbitmq
什么是RabbitMQ RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写.支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScr ...
- .netcore简单使用hangfire
Hangfire简介 Hangfire是一个开源的任务调度框架,它内置集成了控制页面,很方便我们查看,控制作业的运行:对于运行失败的作业自动重试运行.它支持永久性存储,支持存储于mssql,mysql ...
- 浅谈js for循环输出i为同一值的问题
问题再现 最近开发中遇到一个问题,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5. <html> <head> <meta http- ...
- sdsd
自本人拥有手机以来,由于有存短信的特殊嗜好,得出以下不完全统计: 累计中奖93次,资金共计2260万元(人民币),另有各种iphone68部, 电脑36台,轿车27辆,收到法院传票93张,被大学录取5 ...