题目链接:http://poj.org/problem?id=1061

其实欧几里得我一直都知道,只是扩展欧几里得有点蒙,所以写了一道扩展欧几里得裸题。

欧几里得算法就是辗转相除法,求两个数的最大公约数,算法是,a,b的最大公约数是gcd(b,a%b)然后不断递归下去,直到b=0

转换成c++语言就是

 int ex_gcd(int a,int b)
{
if(b==)return a;
return ex_gcd(b,a%b);
}

扩展欧几里得就是假设c=gcd(a,b);则有a*x+b*y=c;

然后我们要做的就是求x,y,我就是这个位置一直有一点晕,但是这种情况其实简单的举个例子就可以得出结论了。

假设a=60,b=45,不难看出gcd(60,45)=15;然后也可以看出x=-2.y=3;

这是一眼可以看出来的,那么递归怎么做,我们先正常的gcd下去

gcd(60,45)--->gcd(45,15)--->gcd(15,0);

这是普通的gcd,然后把x,y带进去我们其实可以想到,当gcd到最后一步即b=0时,一定有x0=1,y0=0,用递归再返回来一层一层求出x,y;那递归的两层之间x,y有什么联系?

gcd(60,45)--->x=-2,y=3;

gcd(45,15)--->x1=1,y1=-2;

然后我们用式子来表示

gcd(a,b)=c=a*x+b*y

gcd(b,a%b)=c=b*x1+a%b*y1

a%b=a-(a/b)*b

a*x+b*y=b*x1+(a-(a/b)*b)*y1=b*x1+a*y1-(a/b)*b*y1=a*y1+b*(x1-(a/b)*y1);

从这里可以分析出来,

x=y1;

y=x1-(a/b*y1)

有了这一个式子我们就不难推出扩展欧几里得算法的代码了

 int ex_gcd(int a,int b)
{
if(b==){
x=;y=;return a;
}
int d=ex_gcd(b,a%b);
int x1=;
x=y;
y=x1-(a/b)*y;
return d;
}//x,y是全局变量

然后知道了扩展欧几里得算法,就可以做这一道题了。

这道题基本就是模板,不用多说,用心体会。。。。

上代码Orz

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm> using namespace std; __int64 n,m,x,y,s,t,d,l,k,ans; __int64 ex_gcd(__int64 a,__int64 b)
{
if(b==)
{
x=;y=;return a;
}
__int64 r=ex_gcd(b,a%b);
__int64 tt=x;
x=y;
y=tt-a/b*y;
return r;
} int main()
{
scanf("%d%d%d%d%d",&s,&t,&n,&m,&l);
k=n-m;ans=t-s;
if(k<){
k=m-n;ans=s-t;
}
d=ex_gcd(k,l);
if(ans%d){
printf("Impossible");return ;
}
__int64 T=l/d;//T是周期,即两只青蛙每相对跳一圈的步数
ans=ans/d;//ans是一开始的距离,先看跳到相同位置步数
ans=ans*x;
ans=(ans%T+T)%T;//跳的步数对周期取余,+T再取余是为了避免负数
printf("%I64d",ans);
}

数据有些大,最好开__int64或者long long (我用__int64过的,没有试过long long 不过应该可以过)

[poj1061]青蛙的约会<扩展欧几里得>的更多相关文章

  1. POJ1061 青蛙的约会 —— 扩展gcd

    题目链接:https://vjudge.net/problem/POJ-1061 青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  2. POJ1061青蛙的约会[扩展欧几里得]

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

  3. poj1061 青蛙的约会 扩展欧几里德的应用

    这个题解得改一下,开始接触数论,这道题目一开始是看了别人的思路做的,后来我又继续以这种方法去做题,发现很困难,学长告诉我先看书,把各种词的定义看懂了,再好好学习,我做了几道朴素的欧几里德,尽管是小学生 ...

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

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

  5. POJ1061青蛙的约会(扩展欧几里德算法)

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

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

    题目链接:http://poj.org/problem?id=1061 青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  7. 解题报告:poj1061 青蛙的约会 - 扩展欧几里得算法

    青蛙的约会 writer:pprp Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 119716 Accepted: 25238 ...

  8. POJ1061 青蛙的约会 和 LOJ2721 「NOI2018」屠龙勇士

    青蛙的约会 Language:Default 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 133470 Accep ...

  9. POJ-1061青蛙的约会,扩展欧几里德求逆元!

                                                               青蛙的约会 以前不止一次看过这个题,但都没有去补..好吧,现在慢慢来做. 友情提示 ...

  10. 扩展欧几里得原理的应用:POJ1061青蛙的约会

    /* POJ 1061: 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 123709 Accepted: 26395 ...

随机推荐

  1. Java基础--方法的定义

    1.为什么要有方法? 方法(又叫函数)就是一段特定功能的代码块.方法提高程序的复用性和可读性. 比如,有了方法,我们可以把要重复使用的一段代码提炼出来,然后在每个需要执行这段代码的地方去调用即可. 2 ...

  2. 基于 Redis 实现 CAS 操作

    基于 Redis 实现 CAS 操作 Intro 在 .NET 里并发情况下我们可以使用 Interlocked.CompareExchange 来实现 CAS (Compare And Swap) ...

  3. day06可变与不可变类型,if判断,运算符

    1:可变不可变类型 2.什么是条件?什么可以当做条件?为何要要用条件? 显式布尔值:True.False 隐式布尔值:所有数据类型,其中0.None.空为假 3:逻辑运算符:用来 # not. and ...

  4. 微信小程序转化为uni-app项目

    前言: 之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的功能,但是由于自己前端抠脚的原因没有写出来,然后自己在网上搜索的时候发现了有个微信小程序里面的页面及其的符合我的需求.那么问题 ...

  5. angular -——组件样式修改不成功

    angular组件样式修改不成功! 自己定义的css可以成功 组件的不行 style在模板字符串里 直接没有 class 是显示的 但是样式不生效 加上面 即可,为什么?我也不太清楚.有知道答案的请回 ...

  6. 迄今为止最硬核的「Java8时间系统」设计原理与使用方法

    为了使本篇文章更容易让读者读懂,我特意写了上一篇<任何人都需要知道的「世界时间系统」构成原理,尤其开发人员>的科普文章.本文才是重点,绝对要读,走起! Java平台时间系统的设计方案 几乎 ...

  7. web实验二 ---通过jQuery实现用户注册身份验证

    通过jQuery实现用户注册身份验证,当每个文本框失去焦点时进行该文本框内容校验,并将校验信息在文本框右侧显示出结果. 具体校验要求: 1.用户名由6-18位字符组成 2.密码由6-18位字符组成,且 ...

  8. 基于RabbitMQ和Swoole实现的一个完整的异步任务系统

    从最开始的使用redis实现的单进程消费的异步任务系统到加入swoole的多进程消费模式,现在,我们的异步任务系统终于又能迈进一步. 因为有了前面两个简单系统的经验,这回基于RabbitMQ的异步任务 ...

  9. 【分布式锁】05-使用Redisson中Semaphore和CountDownLatch原理

    前言 前面已经写了Redisson大多的内容,我们再看看Redisson官网共有哪些组件: image.png 剩下还有Semaphore和CountDownLatch两块,我们就趁热打铁,赶紧看看R ...

  10. Maven+JSP+Servlet+JDBC+Mysql实现的dbExper宾馆管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/mafulong/databaseExper-hotelMaster 这次分享的也是毕设或课程设计选择一样很多的宾 ...