[POJ2115]C Looooops(扩欧)

题目描述

传送门

题解

感觉对英文题要弃疗了。。。
还有这个题目真正的原理不要管它了,反正让你求这个式子:
CxBA(mod2k)
中x的值。
裸的扩欧。
最后好像输出一个非负整数吧。

代码

#include<iostream>
#include<cstring>
#include<cstdio> 
using namespace std;
#define LL long long

LL A,B,C,k;
LL a,b,c,x,y;

LL gcd(LL a,LL b){
    if (!b) return a;
    else return gcd(b,a%b); 
}
void exgcd(LL a,LL b,LL &x,LL &y){
    if (!b) x=1,y=0;
    else exgcd(b,a%b,y,x),y-=a/b*x;
}

int main(){
    while(~scanf("%lld%lld%lld%lld",&A,&B,&C,&k))
    {
        if(!A&&!B&&!C&&!k) break;
        a=C; b=1; c=B-A;
        for(int i=1;i<=k;i++) b=b*2;
        LL t=gcd(a,b);
        if(c%t){
          printf("FOREVER\n");
          continue;
        }
        a/=t;b/=t;c/=t;
        exgcd(a,b,x,y);
        x=((c*x)%b+b)%b;
        printf("%lld\n",x);
    }
}

你可能感兴趣的:(数论,poj)