POJ 2115 C Looooops

来源:互联网 发布:开淘宝网去哪找货源 编辑:程序博客网 时间:2024/06/03 10:39

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


推出同余方程:C*x  - 2^k*y = B -A直接使用扩展gcd求解!

#include <math.h>#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;LL exGcd(LL a, LL b, LL &x, LL &y){    if(b == 0){        x = 1;        y = 0;        return a;    }    LL gcd = exGcd(b, a%b, y, x);    y -= (a/b)*x;    return gcd;}int main(){    LL A,B,C,k;    while(scanf("%lld%lld%lld%lld", &A,&B,&C,&k) == 4){        if(!A && !B && !C && !k)    break;        if(C == 0){            if(A == B)  cout << "0" << endl;            else cout << "FOREVER" << endl;            continue;        }        LL a = C, b = -(1ll << k), c = B - A, x, y;        LL gcd = exGcd(a, b, x, y);        if(c % gcd){            cout << "FOREVER" << endl;            continue;        }        x *= c/gcd;        if(b / gcd < 0) b = -b;        x %= b/gcd;        while(x < 0)    x += b/gcd;        cout << x << endl;    }        //system("pause");    return 0;}


0 0
原创粉丝点击