luogu P1516 青蛙的约会(线性同余方程扩展欧几里德)
题意


题解
做了这道题,发现扩欧快忘了。
根据题意可以很快地列出线性同余方程。
设跳了k次
x+mkΞy+nk(mod l)
(m-n)kΞ-(x-y)(mod l)
然后化一下
(m-n)k+(x-y)Ξ0(mod l)
也就是前面一坨是l的倍数
不妨设
(m-n)k+(x-y)=-tl
(m-n)k+tl=-(x-y)
我们要求的就是保证t<=0(因为我们设的-t倍的l,所以t<=0),k>=0时k的最小值
发现这是一个不定方程
根据裴蜀定理(这个定理搜狗输入法上没有)
当-(x-y)是gcd((m-n),t)的倍数时是有解的。(等式两边都乘-(x-y)/gcd就行了)且(m-n)k+tl=gcd((m-n),t)一定有整数解
所以我们用扩欧算出(m-n)k+tl=gcd((m-n),t)的一组特解和gcd
然后通过判断-(x-y)是不是gcd((m-n),t)的倍数判断有没有解。
假如有解我们就先保证(m-n)为正数根据k的通解公式k=-(x-y)/gcd*k0+h*l/gcd(h为整数)
然后求出最小的正数k就行了
然后这样做似乎没有保证t<=0
其实保证了
考虑通项公式。其实那个k0的系数-(x-y)/gcd
是因为我们要把(m-n)k+tl=gcd((m-n),t)化为-(x-y)/gcd(m-n)k+-(x-y)/gcdtl=-(x-y)给等式两边乘的
这样保证现在-(x-y)/gcd(m-n)k是大于等于-(x-y)的(当-(x-y)为正数)这样t<=0没什么问题。
当当-(x-y)为负数时我们发现-(x-y)/gcd(m-n)k小于等于-(x-y)此时t也变号了所以要求t>=0也没问题。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
long long x,y,n,m,l,xx,yy;
long long exgcd(long long a,long long b,long long &x,long long &y){
if(b==){
x=;
return a;
}
long long c=exgcd(b,a%b,x,y);
long long z=x;
x=y;y=z-(a/b)*y;
return c;
}
int main(){
scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
long long a=m-n;long long b=y-x;
if(a<){
a=-a;
b=-b;
}
long long gcd=exgcd(a,l,xx,yy);
if(b%gcd!=){
printf("Impossible");
}
else printf("%lld",(xx*(b/gcd)%(l/gcd)+(l/gcd))%(l/gcd));
return ;
}
luogu P1516 青蛙的约会(线性同余方程扩展欧几里德)的更多相关文章
- 解题报告:luogu P1516 青蛙的约会
题目链接:P1516 青蛙的约会 考察拓欧与推式子\(qwq\). 题意翻译? 求满足 \[\begin{cases}md+x\equiv t\pmod{l}\\nd+y\equiv t\pmod{l ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ...
- [Luogu P1516]青蛙的约会
按照题意,显然可以列出同余方程,k即为所求天数,再将其化为不定方程 ,那么对这个方程用扩展欧几里德算法即可得出k,q的一组解,但是方程有解的充要条件是(m – n) 和L不同时为零并且x – y是m ...
- ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Descr ...
- 青蛙的约会---poj1061(扩展欧几里德)
题目链接:http://poj.org/problem?id=1061 就是找到满足 (X+mt)-(Y+nt) = Lk 的 t 和 k 即可 上式可化简为 (n-m)t + Lk = X-Y;满足 ...
- 洛谷 P1516 青蛙的约会 解题报告
P1516 青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
- 洛谷——P1516 青蛙的约会
P1516 青蛙的约会 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...
- P1516 青蛙的约会
P1516 青蛙的约会x+mt-p1L=y+nt-p2L(m-n)t+L(p2-p1)=y-x令p=p2-p1(m-n)t+Lp=y-x然后套扩欧就完事了 #include<iostream&g ...
- P1516 青蛙的约会和P2421 [NOI2002]荒岛野人
洛谷 P1516 青蛙的约会 . 算是手推了一次数论题,以前做的都是看题解,虽然这题很水而且还交了5次才过... 求解方程\(x+am\equiv y+an \pmod l\)中,\(a\)的最小整数 ...
随机推荐
- Kattis - bela
Bela Young Mirko is a smart, but mischievous boy who often wanders around parks looking for new idea ...
- JDBC程序实例
实例 ( Statement ): public class JDBC { public static void main(String[] args) throws Exception { Conn ...
- vector的resize与reserve的区别
- systemctl 控制单元
[root@web01 ~]# systemctl status sshd.service ● sshd.service - OpenSSH server daemon Loaded: loaded ...
- POI实现Excel2003插入多张图片
POI的操作Excel时,不可避免有操作图片的处理.怎么插入图片呢?网上也有不少介绍. 下面的代码是向Excel中插入多张图片的例子: public static void main(String[] ...
- tomcat使用及原理
1,Tomcat作为Servlet容器的基本功能 2,Tomcat的组成结构 Tomcat本身由一列的可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器.T ...
- iBase4J部署总结
iBase4J部署总结 序言 最近看到个分布式框架,只有一个字:好.所以部署起来看看.开始的时候说实话遇到了点困难.去码云上看了下,貌似想得到指导要加入一个群,而且需要收费的,反正闲来无事,索性自己搞 ...
- 楼宇自控-BA系统流程总图
总结一下过程中的节点和技能,希望能对其他人有所帮助
- ASP.net session丢失
ASP.NET Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做 ...
- 怎样在Web项目中的service业务层获取项目根路劲
这里我们有两个前提 1.没有使用struts2框架.没有使用servlet,无法给service层传递request对象. 2.使用了Spring框架. 那你可能问.会有这样的情况吗?答案是有的,比方 ...