扩展欧几里得模板+例题
文章目录
- 1.贝祖定理
- 2.欧几里得定理
- 3.扩展欧几里得定理
- 扩展欧几里得解题一般思路
- 例题
1.贝祖定理
满足方程 ax+by=cax+by=cax+by=c 有解的充分必要条件是 gcd(a,b)∣cgcd(a,b) | cgcd(a,b)∣c
2.欧几里得定理
用辗转相除求a,b的最大公因数
ll gcd(ll a,ll b)
{if(b==0) return a;elsereturn gcd(b,a%b);
}
3.扩展欧几里得定理
扩展欧几里得定理目的是解不定方程
根据题意写出同余方程
ax≡c(modb)ax ≡ c(mod \,b)ax≡c(modb)
根据同余方程写出不定方程
ax+by=cax+by=cax+by=c
用来求方程 ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b) 的特解
进而求出 ax+by=cax+by=cax+by=c 的通解
特解 x0,y0x_0,y_0x0,y0
通解
x=x0∗cgcd(a,b)+k∗bgcd(a,b)x=x_0*{c\over gcd(a,b)}+{k*b\over gcd(a,b)}x=x0∗gcd(a,b)c+gcd(a,b)k∗b
y=y0∗cgcd(a,b)−k∗agcd(a,b)y=y_0*{c\over gcd(a,b)}-{k*a\over gcd(a,b)}y=y0∗gcd(a,b)c−gcd(a,b)k∗a
k∈Zk\in Zk∈Z
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(b==0){x=1;y=0;return a;}ll g = exgcd(b,a%b,y,x);y-=a/b*x;return g;
}
这里返回值仍然是 gcd(a,b)gcd(a,b)gcd(a,b) ,在过程中,特解被存储在 x,y 之中根据题意求出所需的解
扩展欧几里得解题一般思路
1.根据题意写出同余方程
ax≡c(modb)ax ≡ c(mod \,b)ax≡c(modb)
2.根据同余方程列出式子
ax+by=cax+by=cax+by=c
带入扩展欧几里得求解
3.求最小整数解
x=(x%b+b)%bx=(x\%b+b)\%bx=(x%b+b)%b(这里 x与bx与bx与b 都是处理过的)
要保证b是正数
扩展欧几里得的难点在于找出同余方程并转化为不定方程
例题
1.P1082 [NOIP2012 提高组] 同余方程
(扩欧板子,求最小整数解)
同余方程题解
2.C Looooops 牛客
(扩欧板子,求最小整数解)
C Looooops 题解
3.Euclid Problem 牛客
(扩欧板子,求最小整数解)
4.青蛙的约会 牛客
(扩欧板子,求最小整数解)
青蛙约会题解
5.Disgruntled Judge 牛客
(扩欧进阶,找不定方程,枚举未知数)
Disgruntled Judge 题解
扩展欧几里得模板+例题相关推荐
- Romantic(扩展欧几里得模板)
裴蜀定理: 任意整数 a, b,(a, b)|d ⇐⇒ ∃ 整数 x, y 使得 ax + by = d,即ax+by=d,那么d一定是gcd(a,b)的倍数 扩展欧几里得定理: 对于两个不全为0的整 ...
- 求逆元(线性求逆元)及其扩展欧几里得
线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...
- Codeforces7C 扩展欧几里得
Line Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- qdu 2017级纳新题(扩展欧几里得)
在你面前撒个娇 哎呦喵喵喵喵喵 Description 我们一起学猫叫 一起喵喵喵喵喵 在你面前撒个娇 哎呦喵喵喵喵喵 我的心脏砰砰跳 迷恋上你的坏笑 你不说爱我我就喵喵喵 每当xjy和hqy一起唱起 ...
- [模板]欧几里得算法/扩展欧几里得
最大公因数(欧几里得算法) $gcd(a,b)=gcd(b\%a,a)$(不一定需要a<b) $gcd(0,b)=b$ 1 inline int gcd(int a,int b){ 2 retu ...
- 拓展欧几里得模板/求逆元模板(java)
拓展欧几里得模板 参考:哈尔滨理工大学ACM培训资料汇编/ACM-ICPC培训资料汇编* 基本原理 :设 a 和 b 不全为 0,则存在整数 x,y 使得 xa yb=gcd(a,b)=c 对于辗转相 ...
- POJ - 1061 青蛙的约会(扩展欧几里得)
题目链接:点击查看 题目大意:两只青蛙在一个单向循环数轴上跳动,给出初始位置和每秒跳动的距离以及数轴长度,问是否可以相遇,若能相遇求出最小时间 题目分析:自从第一次接触扩展欧几里得以来已经有半年时间了 ...
- 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法
打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...
- POJ 1061扩展欧几里得
扩展欧几里得的模板题,需要注意的是为了得到一个最小正数解我们要使ax+by=c中的a,b都是正数 #include<cstdio> #include<cstring> #inc ...
- 欧几里得算法扩展欧几里得
本文包括: 1.几里德算法 递归实现 2.扩展欧几里德算法 递归实现 -实际上就是把别人总结的,我认为有助于自己理解的内容copy过来,再加上几句自己的理解. 欧几里得算法 欧几里德算法又称辗转相除法 ...
最新文章
- 最新wingide6破解方法(支持Linux),亲测有效,支持python3.0
- CentOS 初体验十二:wget下载文件
- ITK:侵蚀灰度图像
- docker安装mysql后怎么链接_使用docker安装mysql并连接
- linux下jdk源码安装,Linux JDK 源码安装
- python三种数据类型_Python-更改Pandas中列的数据类型
- cif t t操作流程图_Danish:STATA 操作正态检验、卡方检验和T检验
- [导入][凤穿牡丹][2008精品年代剧][全38集][李小冉 应采儿]
- 天锐绿盾加密软件支持什么操作系统?
- [趣谈网络协议学习] 01 网络分层
- webpack—模块化、模块化核心、ESM、其它模块化|概念、安装、使用、打包模块、打包配置、核心配置、深入、Loaders、||Plugins、sourceMap、WebpackDevServer、
- VS2010设置快捷键
- Maven教程-使用Nexus搭建私服,Java基础视频
- ISO14000环境管理体系认证
- 顺序结构—— 华氏温度转摄氏温度
- githug关卡小游戏,练习git
- Java基础案例2-6:登录注册小程序
- 如何基于Arduino开发板使用BH1750环境光传感器
- oppo计算机怎么添加到桌面,OPPO怎么把快捷方式添加到桌面 OPPO把快捷方式添加到桌面方法...
- 将数字上调至8的倍数