根据此题 整理下 扩展欧几里得

扩展欧几里得是用来判断并求 ax + by = c 是否有解及其解的数学算法

首先列出定理

1、ax + by = gcd(a,b)

2、gcd(a,b) = gcd(b, a%b);

本题 题意是 判断两个同向的青蛙 在初始位置(x,y),速度不同(m,n)的情况下能否在一个球形路线(周长为L)下相遇

也就是可以列出等式

(x + m*t)%L = (y + n*t)%L;

==>     (x + m*t)%L -(y + n*t)%L =0

==>     (x + m*t) -(y + n*t)  + k*L =0

==>     (m - n )*t  + k*L = y-x

a   *   x  + b*y = c;

判断是否有解以及解;

如果C对gcd(a,b)取余不是0那么就说明无论怎么走 都不会相遇

如果是0

说明有解 带入扩展欧几里得算法求解

我们对 ax + by = c 化简 根据定理2

ax + by = gcd (a,b) = gcd (b,a%b)  =  bx +(a%b) *y = c  = ...

当化简到最后也就是 b = 0时候 原式可以表示成 a*x + 0*y = gcd(a,0) = a

此时也就是说 ==> x=1,y = 0;

求得一个关于a*x +0*y =  gcd(a,0) = a的解

ax' + by'

=  bx + (a%b) *y

= bx + (a - a/b*b ) *y

= bx + ay- a/b*by

= ay + b(x-a/b*y)

也就是说 当前ab下的解

通过下一层递归的x和y求出

x' = y

y' = (x-a/b*y)

于是可以写出扩展欧几里得算法

当递归回溯回来的时候 我们就得到了 ax' + by' = gcd(a,b)的解

ll egcd(ll a,ll b,ll &x,ll &y)
{if(b==0) {x = 1,y = 0;return a;}ll ans = egcd(b,a%b,x,y);ll t = x;x = y;y = t-a/b*y;return ans;
}

可是问题还没解决 我们要求的是等于C的解我们现在得到了gcdab的一组解,这就需要我们进一步转化答案

设t = C/gcd(a,b)

可以将 ax + by  = c =   a * t *x + b * t *y = gcd(a,b) *t

也就是 我们得到的解 的X值 也就是时间值 再乘以 t 就是对应C 下的x解

然后得到解后有可能解是负数 那么需要我们进一步找通解

通解公式

x = x0 + k * ( b / gcd(a,b) )

y = y0 + k * ( a / gcd(a,b) )

最终可以获得最小正整数解

例题  POJ 1061

code:

#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <functional>
#include <vector>
#include <cmath>
#include <string>
#include <stack>
#include <queue>
using namespace std;
typedef long long ll;
ll egcd(ll a,ll b,ll &x,ll &y)
{if(b==0){x = 1,y = 0;return a;}ll ans = egcd(b,a%b,x,y);ll t = x;x = y;y = t-a/b*y;return ans;
}
int main()
{ll x,y,m,n,L;cin>>x>>y>>m>>n>>L;ll a,b,c;a = m-n;b = L;c = y-x;if(a<0){a = -a;c = -c;}ll gcd = egcd(a,b,x,y);cout<<egcd(x,y,a,b)<<endl;if(c%gcd!=0)puts("Impossible");else{x = x*c/gcd;ll t = b/gcd;if(x>=0)x %=t;elsex = x%t+t;}return 0;
}

==>     (x + m*t)%L -(y + n*t)%L =0

扩展欧几里得算法 POJ 1061相关推荐

  1. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...

  2. POJ 2142: 扩展欧几里得算法

    POJ 2142: The Balance Description Data 思路 扩展欧几里得算法 线性组合 Code --扩展欧几里得算法 原题传送门 Description Ms. Iyo Ki ...

  3. 扩展欧几里得算法_扩展欧几里得递推算法

    欧几里得算法 表示 整数 a 与 b 的最大公约数. 若 t = a % b, 则 证明略. 递推版 gcd 算法 gcd 接受变量元组 (a, b) 作为输入,输出最大公约数 (r). 我们很难直接 ...

  4. 欧几里得算法扩展欧几里得算法

    欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...

  5. 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...

    难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...

  6. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  7. GCD LCM 欧几里得算法 扩展欧几里得算法

    欧几里得算法: 辗转相除法的关键恒等式:gcd(a,b)=gcd(b,a mod b); 边界条件:gcd(a,0)=a; //最大公约数 int gcd(int a,int b) {return b ...

  8. 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)

    一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...

  9. 2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】

    问题 C: 磨刀 时间限制: 1 Sec  内存限制: 128 MB 提交: 190  解决: 39 [提交] [状态] [讨论版] [命题人:admin] 题目描述 磨刀是一个讲究的工作,只能在n℃ ...

最新文章

  1. 互联网运营期产品评审杂思,互联网营销
  2. react-native 使用 antd-mobile-rn UI进行开发app
  3. 爱思唯尔云论坛:疫情挑战下的大数据与人工智能研究
  4. 南开大学计算机本科论文,南开大学本科毕业论文设计-南开大学教务处主页.DOC...
  5. ControlStyles(枚举)
  6. Spring框架----四种常用通知类型
  7. 怎样输出矩阵乘积C语言,c语言矩阵相乘
  8. 如何搭建一对一直播PHP直播系统源码的流程
  9. 十三天学会C语言笔记
  10. 基于STM32HAL库ADS1256调试笔记
  11. 房子装饰风水有哪些讲究和忌讳
  12. windows10系统超全优化方法
  13. 截止9月10日苹果审核指南中文版
  14. ping的各种意义、作用
  15. 非对称加密实战(一):JDK生成keystore获取公钥私钥及代码验证【附源码】
  16. 17-7PH不锈钢(SUS 631)用于哪些领域
  17. mac提示dns错误如何解决
  18. 【达内课程】ListView使用
  19. jep使用_JEP 374:禁用和弃用偏向锁定
  20. 二叉树的递归算法到底该怎么理解?

热门文章

  1. 真机调试及上线简略流程
  2. JAVA可阻塞队列-ArrayBlockingQueue
  3. Bootstrap中过渡效果(Transition)模态框插件的使用案例
  4. 【编程题目】给你 10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数...
  5. SharePoint【学习笔记】-- SharePoint 2010 技术参数整理
  6. 串口开发,数据类型转换——字符串转 byte[],byte[]转二进制,二进制转十进制转byte[],byte[]转十进制,byte[]拼接,校验
  7. ie9 Flash内容无法显示
  8. matlab builder for java下载,Matlab Builder JA - Compile Matlab into a Java jar - Free Version?
  9. java 组合对象_Java 中组合模型之对象结构模式的详解
  10. Idea 封装Java代码片段 快速提示