ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[Kuangbin带你飞]专题十四 数论(二)

2019-03-18 15:51:11  阅读:219  来源: 互联网

标签:专题 return 数论 LL Kuangbin mod include 欧几里得 extgcd


青蛙的约会  扩展欧几里得法求解同余方程 

题意:两只青蛙,沿着一条首位相连的数轴在跳,数轴长度为L,A在x处,一次可以跳m米,B在y处,一次可以跳n米,问跳了几次后碰面。

x+mt\equiv y+nt (mod L)    移项得(m-n)t\equiv y-x(mod L) 即(m-n)*t+k*L=y-x 

注意y-x必须大于0

关于扩展欧几里得的证明 证明2

我代码中a(m-n)+kL=y-x

运用extgcd(m-n,L,a,k) 得到的a是 \frac{m-n}{gcd(m-n,L)}*a+\frac{L}{gcd(m-n,L)}*k=1的解,要得到原方程的解,还需要

\frac{a*(y-x)}{gcd(m-n,L)} \% \frac{L}{gcd(m-n,L)} 才是(m-n)*a'+L*k'=y-c的解

以及(y-x)无法被gcd(m-n,L)整除的话,无解

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
LL x,y,m,n,L;
LL extgcd(LL a,LL b,LL &x,LL &y)  //返回gcd(a,b)  ax+by=1
{
    if(a==0&&b==0) return -1;
    if(b==0) {x=1;y=0;return a;}
    LL d=extgcd(b,a%b,y,x);
    y=y-a/b*x;
    return d;
}
LL mod_inverse(LL a,LL n)
{
    LL x,y;
    LL d=extgcd(a,n,x,y);            //由扩展欧几里得得到一个特解x
    if(d==1) return (x%n+n)%n;      //+n 防负数。。   x变为最小非负整数解
    else return -1;
}

int main()
{
//    if(x<0) x=L+x;
//    if(y<0) y=L+y;   原先我这么写可真是傻逼啊,我应该让y-x>0,同步改
//设时间为t,则两个青蛙的位置分别为(x+mt)mod L、(y+nt) mod L,相遇即是(x+mt)%L=(y+nt)%L,即(m-n)*t+k*L=y-x
   LL x,y,m,n,L;
   while(cin>>x>>y>>m>>n>>L)
   {
       if(m<n) swap(m,n),swap(x,y);  //这行代码是必要的  extgcd函数是必须的
       LL a,k;
       LL c=y-x;
       LL d=extgcd(m-n,L,a,k);
       LL r=mod_inverse((m-n)/d,L/d);
       if(c%d) cout<<"Impossible"<<endl;    //c不是d的倍数,则无解
       else cout<<((r*c/d)%(L/d)+L/d)%(L/d)<<endl;  // (a*c/d)%(L/d)+(L/d)也对   这个是最小正答案
   }
   return 0;
}

 

标签:专题,return,数论,LL,Kuangbin,mod,include,欧几里得,extgcd
来源: https://blog.csdn.net/iroy33/article/details/88638591

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有