很裸的扩展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;
}