1. 程式人生 > >POJ 2115 C Looooops 擴充套件gcd

POJ 2115 C Looooops 擴充套件gcd

很裸的擴充套件gcd 3月份做過一次 不過那時候稀裡糊塗不求甚解 最近又好好看了下擴充套件gcd 這就一sb題

ACcode:

#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
ll ex_gcd(ll a,ll b,ll &x,ll &y){
    if(a==0&&b==0)return -1;
    if(b==0){x=1,y=0;return a;}
    ll d=ex_gcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}
int main(){
    ll a,b,c,k,A,B,C,D,X,Y;
    while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&k)&&(a+b+c+k)){
        A=c;
        B=1ll<<k;
        C=b-a;
        D=ex_gcd(A,B,X,Y);
        if(C%D!=0)puts("FOREVER");
        else {
            X=X*(C/D);
            X=(X%(B/D)+B/D)%(B/D);
            cout<<X<<'\12';
        }
    }
    return 0;
}