【整理思路】青蛙的约会

本文探讨了一种数学问题,涉及两只青蛙在数轴上的跳跃以达到同一位置。通过分析,得出结论:跳跃步数必须是(m-n)和L的最大公约数的倍数。利用欧几里得算法求解gcd,并给出了解题步骤和通用解法。
摘要由CSDN通过智能技术生成

已知:数轴长度为 L(环形) 。青蛙1每次跳跃的步数为 m ,青蛙2每次跳跃的步数为 n ;开始时,青蛙1在 x 的位置,青蛙2在 y 的位置 。

问题: 求两只青蛙在同一时刻跳到同一地点的最小步数。

设两只青蛙的跳跃次数为 k 。

∵他们需要在同一时刻到达同一位置

∴ km+x ≡ kn+y (mod L)

   km-kn ≡ y-x (mod L)

   k(m-n) ≡ y-x(mod L)

其等价于 k(m-n)-(y-x) 是 L 的倍数

 设 k(m-n)-(y-x) 是 L 的 -a 倍

可以将方程改写为 k(m-n)-(y-x)=-aL

k(m-n)+aL=y-x

因扩展欧几里得算法:对于任意整数 a,b,存在一对整数 x,y 满足 ax+by=gcd(a,b)

由此推得 : y-x 必须是 gcd(m-n,L) 的倍数才有最终解

在有解时,先用欧几里得算法求出一组整数解 k0,a0,满足 (m-n)*k0+L*a0=gcd(m-n,L),然后 k=k0*L/gcd(m-n,L) 即为一个解。方程的通解是所有模 L/gcd( m-n,L) 与 同余的余数

#include<bits/stdc++.h>
using namespace std;
long long X,Y,M,N,L,Ans1,Ans2;
long long gcd(long long x,long long y){ return y ? gcd(y,x%y) : x ; }
long long exgcd(long long a,long long b,long long &x,long long
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值