GCD LCM 欧几里得算法 扩展欧几里得算法
欧几里得算法:
辗转相除法的关键恒等式:gcd(a,b)=gcd(b,a mod b);
边界条件:gcd(a,0)=a;
//最大公约数
int gcd(int a,int b)
{return b==0?a:gcd(b,a%b);}
公式:
gcd(a,b)*lcm(a,b) = a*b;
最小公倍数:
lcm(a,b)=a/gcd(a,b)*b;//先除后除
lcm(a,b)=a*b/gcd(a,b); //错误,a*b可能会溢出
扩展欧几里得算法:
//求整数x和y,使得a*x+b*y=d,且|x|+|y|最小,d=gcd(x,y)
void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
{if(!b) {d=a; x=1; y=0;}else {exgcd(b,a%b,d,y,x);y-=x*(a/b);}
}
给一个不定方程Ax+By+C=0. 这个方程是否存在整数解?
如果存在,就输出一组x和y,否则输出-1
输入
有多组样例,每行三个数字A,B,C
-2×10^9 < A,B,C < 2×10^9
输出
若有解,输出一行x和y,以空格隔开。否则输出-1
样例输入
2 5 3
931480234 -1767614767 -320146190
-1548994394 -1586527767 -1203252104
1906842444 749552572 -1693767003
-1183748658 875864960 -1315510852
200000003 200000001 1
样例输出
6 -3
-98880374013340920 -52107006370101410
-878123061596147680 857348814150663048
-1
-97498198168399474 -131770725522871624
100000000 -100000001
一个二元一次方程如果存在整数解,那么就有多组(x,y)满足方程,用扩展欧几里得定理求出来的(x,y)是确定的
如果 C%gcd(A,B)不等于0,说明方程 Ax + By = C 无整数解。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void exgcd(ll a,ll b,ll &d,ll &x,ll &y)//扩展欧几里得
{if(!b){//若b=0,gcd(a,b)=gcd(a,0)=a;d=a;//a,b的最大公约数x=1;y=0;}else{exgcd(b,a%b,d,y,x);y-=x*(a/b);}
}
int main()
{ll a,b,c;while(scanf("%lld%lld%lld",&a,&b,&c)!=EOF){ll x=0,y=0,d=0;exgcd(a,b,d,x,y);//printf("%d\n",d);if(c%d==0)printf("%lld %lld\n",-x*(c/d),-y*(c/d));//求不定方程Ax+By+C=0的一组整数解//printf("%lld %lld\n",x*(c/d),y*(c/d));//求不定方程Ax+By=c的一组整数解else//不存在整数解printf("-1\n");}return 0;
}
GCD LCM 欧几里得算法 扩展欧几里得算法相关推荐
- 欧几里得算法和扩展欧几里得算法——杨子曰数学
欧几里得算法和扩展欧几里得算法--杨子曰数学 超链接:数学合集 不说废话,咱们直接开始 欧几里得算法 一句话: g c d ( a , b ) = g c d ( b , a m o d b ) gc ...
- 欧几里得算法/扩展欧几里得算法
转载请说明出处:http://blog.csdn.net/leader_one/article/details/75222771 说在前面 出于尊重,简单介绍一下欧几里得(想了解更多自己百度去) 欧几 ...
- 密码学基础算法(一)基于整数的欧几里得算法和扩展欧几里得算法
图片来源: 随便谷歌的一个图片 图片地址: https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/euclidean_3_orig. ...
- 欧几里得算法扩展欧几里得算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...
- 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)
一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...
- 欧几里得算法和扩展欧几里得算法详解
欧几里得算法: int gcd(int x,int y){if(y) return gcd(y,x%y);return x; } 扩展欧几里得算法: 先说一个整体思路: 先求Ax+By=gcd(A,B ...
- 欧几里得算法和扩展欧几里得算法的简单例子
欧几里得算法: #include <cstdio> #include <cstdlib>/* * 挑战...p113 */struct point{ //格点int x;int ...
- 【原创】更相减损术 stein算法 欧几里得算法 拓展欧几里得算法 扩展欧几里得算法 逆元的计算与筛法 解模线性方程
欧几里得 说在前面 数论学复习 Part 6. 然后再来一章CRT和组合数,就飞往概率,以此为跳板去向DP. 计划很美啊你. P.S. 这么说来拉格朗日插值可以说是数论学复习的Part 0了啊. 有一 ...
- 欧几里得扩展欧几里得算法及相关的数学证明
//欧几里得算法求最大公约数 int gcd(int m,int n) {int u0=m,u1=n,t;if( u0<u1 )// 保证u0>=u1u0^=u1,u1^=u0,u0^=u ...
最新文章
- 所有的中台都是业务中台
- prefetch下载SRA 数据
- 国际农产品市场谋定特点趋势 对话国际农民丰收节贸易会
- NLP分析小说人物关系,找找主人公的真爱。
- UITableView的使用及代理方法
- C# 使用Timer控件设置时间间隔
- 在Brackets中使用jsHint遇到的问题
- 华三交换机路由器图标_弱电箱网口不够用,用华三8口千兆交换机搞定
- 项目部署服务器 jstl,Springboot集成jsp及部署服务器实现原理
- jQuery10种不同动画效果的响应式全屏遮罩层
- 怎么监听Android软键盘的打开和关闭
- 程序员如何自制酒店 Wi-Fi?
- 今天遇到个超郁闷的问题
- Prim算法实现最小生成树MST(java)
- dat文件导入cad画图步骤_怎么样给CAD文件加密?
- PowerBuilder9 爬取酷狗网页版音乐
- java水果类用equal重量价格,Java基础练习题 附答案
- shal+php,学习笔记---PHP中几种加密算法(MD5,shal,base64_encode等)
- 金仓数据库KingbaseES的连接方法
- Spring-IOC与AOP是解决什么问题的?
热门文章
- javaScriptDay01
- SlidingMenu的简单使用
- 将内存单元中小写字符改成大写字符
- VHDL操作运算符的优先级顺序
- View的setOnClickListener的添加方法
- html首字母样式,html标签手册
- c++代码好玩_Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)...
- 输变电设备物联网节点设备无线组网协议_U-Link 物联网(工业互联网)服务平台
- 江苏c语言二级试题及答案,江苏省计算机二级C语言试题及答案.doc
- 已经围上为何不算目_在湖人打球顺风顺水,戴维斯为何还要亏本卖掉洛杉矶豪宅?...