求解不定方程 (扩展欧几里得算法)
想看详细证明的:https://www.cnblogs.com/hadilo/p/5914302.html
扩展欧几里得算法,简称 exgcd,一般用来求解不定方程,求解线性同余方程,求解模的逆元等,本篇只给出解不定方程ax+by=c;
定理1: 如果a和b都是整数,则有整数x 和整数y 使得 ax+by=gcd(a,b);(Bezout定理)
定理2:整数a,b互素当且仅当存在整数x,y使得ax+by=1;
定理3:a,b,c都是整数。
如果c不是gcd(a,b)的倍数,则不定方程ax+by=c 没有整数解。
如果c是gcd(a,b)的倍数,则有无穷多的解。
如果(x0,y0)是ax+by=c的一个解,则ax+by=c的所有整数解是 :
x= x0+k*(b / gcd(a,b) )
y= y0-k*(a / gcd(a,b) ); 其中k是整数。
给出模板:
#include<bits/stdc++.h>
using namespace std;
int exgcd(int a,int b,int &x,int &y){if(b==0) {x=1,y=0;return a;}int t=exgcd(b,a%b,x,y); //得到最大公约数t int x0=x,y0=y;x=y0;y=x0-(a/b)*y0;//得到通解 return t;
}int main(){int a,x,y,b,c;cin>>a>>b>>c;//a,b,c; int t=exgcd(a,b,x,y);if(c%t!=0) cout<<"无解";else{printf("通解为:x= %d ,y= %d\n",x,y);cout<<"给出10组特解:"<<endl;for(int i=-5;i<=5;i++){printf("(x=%d,y=%d) ",x+i*(b/t),y-i*(a/t));if(i==0) cout<<endl;} }return 0;
}
例题 SGU 106
求解不定方程 (扩展欧几里得算法)相关推荐
- C++ 二元一次不定方程巧妙求解——运用扩展欧几里得算法
前言 在关于数论的学习中,求解二元一次不定方程是很重要的,在学习求解二元一次不定方程之前,要先了解欧几里得算法和扩展欧几里得算法. 关于数论的学习 欧几里得算法 欧几里得算法就是辗转相除法,欧几里得算 ...
- 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...
难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...
- 扩展欧几里得算法 求解 丢番图方程
丢番图方程: 有一个或者几个变量的整系数方程,它们的求解仅仅在整数范围内进行. a * x + b * y = c ( 其中所有数均为整数, 已知 x, y, c ) 例如:鸡兔同笼问 ...
- Python在GF(2⁸)有限域上求解多项式的乘法逆元——基于扩展欧几里得算法
文章目录 一.前言 二.数学基础 1.GF(2⁸)有限域内的多项式 2.不可约多项式 3.多项式模运算 3.乘法逆元 三.算法步骤 1.扩展欧几里得算法 2.多项式除法 3.多项式乘法 四.代码实现 ...
- 扩展欧几里得算法、ax+by=c求解、ax≡c(mod m)、逆元求解、(b/a)%m计算c++代码
参考 <算法笔记>(胡凡) 扩展欧几里得算法 求解ax+ by = gcd(a, b) int exGcd(int a, int b, int &x, int &y) {i ...
- 欧几里得算法扩展欧几里得算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...
- [BZOJ1477] 青蛙的约会|扩展欧几里得算法
1477: 青蛙的约会 Time Limit: 2 Sec Memory Limit: 64 MB Submit: 306 Solved: 192 [Submit][Status][Discuss ...
- c语言中欧几里得模乘法逆元,扩展欧几里得算法同余方程模m乘法逆元详解
欧几里德算法: 复习:求最大公约数算法(欧几里得算法.也叫辗转相除法).欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd ...
- 『扩展欧几里得算法 Extended Euclid』
Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)( ...
最新文章
- DNS同时占用UDP和TCP端口53——传输数据超过512时候用tcp,DNS服务器可以配置仅支持UDP查询包...
- C#中计时器Stopwatch的使用
- 基于SIP协议的视频通讯
- AVS 分像素运动估计优化算法
- 组装电脑多少钱一台_客户花9000元组装一台电脑,奸商赚5000块,利润真吓人
- 干货 | 机器学习在web攻击检测中的应用实践
- Android 教你打造炫酷的ViewPagerIndicator
- 功能对等四个原则_功能对等四原则
- 关键词文章生成器-智能关键词文章生成器
- 天津仁爱学院2021级高职升本科新生报到须知
- 文件上传数据库,并下载(包含删除,根据条线查询等功能)
- 哈尔滨工业大学 计算机系教授,哈尔滨工业大学计算机科学与技术硕士导师---杨孝宗...
- Linkis和DSS本地和远程调试文档
- 【系统分析师之路】第六章 多媒体基础知识
- 毕业参加工作了,记住一句话,攒钱绝对靠谱
- 1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)
- Android-圆形头像
- html5指标源码,一个超准的技术指标源码!
- 第二届深圳互联网高层峰会
- 浅谈技术难度与公司收益
热门文章
- jQuery按住滑块拖动验证插件
- 质性数据分析软件NVivo的许可
- 单系统 台电x80pro_台电X80HD安装Win8单系统教程
- HTML点击头像修改页面,头像修改页.html
- 大数据时代,我竟然在用Excel和SPSS做数据分析,真香!
- matlab 神经识别取整数_Matlab取整
- 再也不用花一天时间做ppt了
- 【数据分析能力是指什么?】
- android反编译修改教程,Android逆向反编译代码注入
- 计算机上64位数和32位数,一不小心就蓝屏?安装win10系统和软件,你选32位还是64位?...