POJ 2115 C Looooops——拓展欧几里得算法

来源:互联网 发布:时间轴网页 源码 编辑:程序博客网 时间:2024/05/24 00:05

这个题和POJ1061基本相同,1061的解释比较详细,需要的话可以看一下http://blog.csdn.net/hao_zong_yin/article/details/72356640

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll A, B, C, k, a, b, c, x, y, gcd;ll ex_gcd(ll a, ll b, ll &x, ll &y) {    if (b == 0) {        x = 1, y = 0;        return a;    }    ll q = ex_gcd(b, a % b, y, x);    y -= a / b * x;    return q;}int main(){    while (scanf("%lld %lld %lld %lld", &A, &B, &C, &k) == 4 && (A + B + C + k)) {        a = C, b = (ll)1<<k, c = B - A;        gcd = ex_gcd(a, b, x, y);        if (c % gcd) {            printf("FOREVER\n"); continue;        }        b /= gcd;        x = ((x * (c/gcd)) % b + b) % b;        printf("%lld\n", x);    }    return 0;}


阅读全文
0 0
原创粉丝点击