zoukankan      html  css  js  c++  java
  • poj2115 C Looooops——扩展欧几里得

    题目:http://poj.org/problem?id=2115

    就是扩展欧几里得呗;

    然而忘记除公约数...

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    ll A,B,C,k,a,b,x,y,g,s;
    ll gcd(ll a,ll b){return a%b?gcd(b,a%b):b;}
    void exgcd(ll a,ll b,ll &x,ll &y)
    {
        if(!b){x=1; y=0; return;}
        exgcd(b,a%b,x,y);//最近总是忘写这个啊...无力... 
        ll t=x; x=y; y=t-a/b*y;
    }
    int main()
    {
        while(1)
        {
            scanf("%lld%lld%lld%lld",&A,&B,&C,&k);
            if(!A&&!B&&!C&&!k)return 0;
            a=C; b=1ll<<k; g=gcd(a,b); s=(B-A+b)%b;
            if(s%g){printf("FOREVER
    "); continue;}
            a/=g;//()
            b/=g;//!!
            s/=g;//!
            exgcd(a,b,x,y);//ax+by=g
            x=(x*s%b+b)%b;
            printf("%lld
    ",x);
        }
    }
  • 相关阅读:
    高级打字机
    不等数列
    间谍网络
    医院设置
    题目编号生成器
    传纸条
    聪明的打字员
    倒水问题
    八数码难题
    生日蛋糕
  • 原文地址:https://www.cnblogs.com/Zinn/p/9264917.html
Copyright © 2011-2022 走看看