扩展整数poj 1061 青蛙的约会 扩展欧几里得

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

    第一次做扩展欧几里得。

     x+mt=y+nt+kl 化成 x-y=(n-m)*t+kl

    对右式做扩展欧几里得算法。若gcd(n-m,l)不能整除(x-y)。即不能相遇。 

    若能整除 则找到了一组解  

    当初要求小最的整数解。因为解群满意 (x+lcm/(n-m)*k)*(n-m)+(y+lcm/l*k)*l=d。

    所以x对lcm/(n-m)取模则为案答。若取模小于即是0 要需再加lcm/(n-m)

    


    

    

    每日一道理
时间好比一条小溪,它能招引我们奔向生活的海洋;时间如同一叶扁舟,它将帮助我们驶向理想的彼岸;时间犹如一支画笔,它会指点我们描绘人生的画卷。

    #include <cstdio>

    #include <cstring>

    #include <cmath>

    using namespace std;

    int exgcd(int n,__int64 &x,int m,__int64 &y)

    {

    if(m==0)

    {

        x=1;

        y=0;

        return(n);

    }

    else

    {

        int ans=(exgcd(m,x,n%m,y));

        long long tmp=y;

        y=x-n/m*y;

        x=tmp;

        return(ans);

    }

    }

    int main()

    {

    int x,y,n,m,l;

    scanf("%d %d %d %d %d",&x,&y,&m,&n,&l);

    long long a1,a2;

    int ans=exgcd(n-m,a1,l,a2);

    if((x-y)%ans)

    {

        printf("Impossible\n");

    }

    else

    {

        long long tmp=l/ans;

        a1=a1*(x-y)/ans;

        a1%=tmp;

        if(a1<=0) a1+=tmp;

        printf("%lld\n",a1);

    }

    return 0;

    }

文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。

posted @ 2013-04-30 18:14  坚固66  阅读(118)  评论(0编辑  收藏  举报