扩展欧几里得
看不出来,我太菜了
//扩展欧几里得
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
typedef long long ll;
ll x,y;
ll exgcd(ll a,ll b)
{
if(b==0)
{
x=1;
y=0;
return a;
}
ll c=exgcd(b,a%b);
ll t=x;
x=y;
y=t-a/b*y;
return c;
}
int main()
{
ll A,B,C,k;
while(~scanf("%lld%lld%lld%lld",&A,&B,&C,&k))
{
if(!A&&!B&&!C&&!k)
break;
ll a=C,b=pow(2,k),c=B-A;
ll g=exgcd(a,b);
if(c%g)
{
printf("FOREVER\n");
continue;
}
x=x*(c/g);
x=(x%(b/g)+b/g)%(b/g);
printf("%lld\n",x);
}
return 0;
}