拿到这道题之后,很快就会把它转化为 ax+by=d的求解问题(a,b,d已知,求x,y)。这个问题如何求解呢。

我一开始用穷举。很显然,会TLE.

然后,看了别人的解题方法。原来这就是传说中的扩展的欧几里得问题。

用欧几里得求两个数的最大公约数大家都会。但是这个扩展的欧几里得就不那么好理解了。

在网上找的对扩展的欧几里得的理解:

扩展欧几里德算法理解(By ruiqi)
欧几里德算法很好理解了。但是扩展了一下却一直弄的不明不白。
网上关于这个的讲解是很多了。但总体说来都不是太好理解。
思索了好长时间,总结了下面的思路:(自我感觉良好了)
扩展欧几里德定理
对于与不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数。那么存在整
数 x,y 使得 gcd(a,b)=ax+by。(貌似 x,y 也是唯一的,这个我不是太清楚的)。
最重要的是怎么理解下面的代码了:
#inc lude<iostream>
using namespace std;
int x,y,q;
void extend_Eulid(int a,int b)
{
if (b==0)
{
x=1; y=0; q=a;
}
else
{
extend_Eulid(b,a%b);
int temp=x;
x=y; y=temp-a/b*y;
}
}
int main()
{
int a,b;
cin>>a>>b;
if (a<b) swap(a,b);
extend_Eulid(a,b);
printf("%d=(%d)*%d+(%d)*%d\n",q,x,a,y,b);
}
求解 x,y 的方法的理解
我们不妨设 a>b。
1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
2,ab<>0 时
设 ax1 +by1 =gcd(a,b);
bx2 +(a%b)y2 =gcd(b,a%b);
根据朴素欧几里德原理有 gcd(a,b)=gcd(b,a%b);
则:ax 1 +by1 =bx2 +(a%b)y2 ;
即:ax 1 +by1 =bx2 +(a-(a/b)*b)y2 =ay2 +bx2 -(a/b)*by2 ;
根据恒等定理得:x1 =y2 ; y1 =x2-(a/b)*y2 ;
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2.
上面的思想是递归定义了,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以
结束。
有了这个分析,extend_Eulid 函数的理解也就不难了。

理解了欧几里得,这道题算是解了一半。然后要做的就是对普通的ax+by=d(d并不一定是gcd(a,b))求解。

详细分析过程见http://blog.csdn.net/SwordHoly/article/details/4423543

做这道题,太扯了,完全是数学啊。 数学,我的痛处。

/** =====================================================================================**       Filename:  1061.c**    Description:  **        Version:  1.0*        Created:  2011年12月08日 11时27分16秒*       Revision:  none*       Compiler:  gcc**         Author:  MaZheng (blog.csdn.net/mazheng1989), mazheng19891019@gmail.com*        Company:  Dalian University Of Technology** =====================================================================================*/#include<stdio.h>//please declare parameters here.
long long k,t,d;//please declare functions here.
void extend_gcd(long long a,long long b)
{if(b==0){k=1;t=0;d=a;}else{extend_gcd(b,a%b);long long temp;temp=k;k=t;t=temp-(a/b)*t;}
}
int main()
{freopen("input.txt","r",stdin);long long a,b;long long int x,y,m,n,l;//input your ...while(scanf("%lld %lld %lld %lld %lld",&x,&y,&m,&n,&l)!=EOF){a=m-n;b=y-x;if(a<0){a=-a;b=-b;}extend_gcd(a,l);if(b%d!=0){printf("Impossible\n");}else{k=k*b/d;t=t*b/d;l=l/d;if(k>=0)k=k%l;elsek=k%l+l;if(k==0)k=l;printf("%lld\n",k);}
//      printf("%lld %lld %lld %lld %lld",x,y,m,n,l);}return 0;
}

poj1061青蛙的约会相关推荐

  1. POJ1061 青蛙的约会【扩展欧几里得算法】

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 126746   Accepted: 27392 Descript ...

  2. POJ1061青蛙的约会(拓展欧几里得)

    青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 146847 Accepted: 34169 Description ...

  3. POJ1061 青蛙的约会

    使用拓展欧几里得算法 使用了刘汝佳紫书上的拓展欧几里德程序,具体实现过程还是没怎么看懂...看懂了补上. 该代码能解决一个等式问题:a*x+b*y=gcd(a,b),该算式中a,b为已知量,下面代码能 ...

  4. poj1061 青蛙的约会(扩展欧几里德)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 98763   Accepted: 18783 Descripti ...

  5. POJ1061 青蛙的约会(线性同余方程)

    线性同余方程$ ax \equiv b \pmod n$可以用扩展欧几里得算法求解. 这一题假设青蛙们跳t次后相遇,则可列方程: $$ Mt+X \equiv Nt+Y \pmod L$$ $$ (M ...

  6. POJ1061 青蛙的约会(扩展欧几里得)题解

    Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...

  7. 数论入门之青蛙的约会poj1061

    青蛙的约会POJ1061 前言 一.什么是扩展欧几里得? 1.欧几里得模板 2.扩展欧几里得模板 二.扩展欧几里得的简要证明 三.题解 四.题解代码 题意: 两只青蛙在网上相识了,它们聊得很开心,于是 ...

  8. P1516 青蛙的约会 [exgcd]

    P1516 青蛙的约会 题意:在一个长为\(l\)的环上面有两只青蛙,一只出发点为\(x\),一次跳\(m\),另一只出发点为\(y\),一次跳\(n\),求相遇时间. 这个长为\(l\)的环不难想到 ...

  9. POJ 1061 青蛙的约会(扩展欧几里得)

                                                                   青蛙的约会 Time Limit: 1000MS   Memory Lim ...

最新文章

  1. mysql创建表为什么第二次,mysql当我加入同一个表两次聚合是错误的
  2. div搜索框与按钮不在一行_前阿里巴巴运营专家:搜索框的5大运营玩法
  3. 模拟键盘输入的keycode
  4. springboot整合liquibase入门实例
  5. TLS回调函数(2)
  6. python如何连续打印_Python实现批量打印功能
  7. RxSwift之深入解析如何创建观察者Observer
  8. hibernate总结-N+1问题
  9. java实现动态验证码源代码——绘制验证码的jsp
  10. 详解linux运维工程师入门级必备技能
  11. 一、部署虚拟环境来安装Linux系统
  12. mysql的应用_mysql应用场景
  13. 国家集训队论文99~08年全版
  14. vue-giant-tree模糊搜索,自动展开匹配子节点,再次搜索可重新加载节点
  15. ubuntu docker的cron定时任务不执行
  16. python实现图像白平衡
  17. 【期末复习】信息安全技术(含答案)
  18. Matlab放烟花 带音效哟 祝大家新年快乐
  19. 【Eigen】【Eigen实践】【Eigen的使用学习记录】
  20. 股票基础知识(入市必读)

热门文章

  1. 图片识别——均值哈希算法
  2. RCNN算法思想简单讲解概述————(究极简单的讲述和理解)
  3. python txt文件常用读写操作
  4. CentOS 7 中 pptpd安装
  5. mysql describe 分页_mysql之分页方式了解
  6. 【解决方案】windows7无法启动黑屏,报0xc000014c错误解决方案不用重新安系统
  7. Linux解决txt文件乱码问题
  8. 【2022国赛模拟】摆(bigben)——行列式、杜教筛
  9. 实现轮播模拟点击事件
  10. 重积分 | 第二类曲面积分投影法正负判断