POJ 2115
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
long long a, b, c, k;
long long extgcd(long long a, long long b, long long &x, long long &y)
{
if (b ==0)
{
x =1;
y =0;
return a;
}
long long d = extgcd(b, a % b, x, y);
long long t = x;
x = y;
y = t - a / b * y;
return d;
}
int main()
{
while (scanf("%lld%lld%lld%lld", &a, &b, &c, &k), (a | b | c | k) !=0)
{
long long x, y;
long long t = b - a;
long long h =1;
h <<= k;
long long g = extgcd(c, h, x, y);
if (t % g !=0)
{
printf("FOREVER\n");
continue;
}
x *= t / g;
x = (x % (h / g) + (h / g)) % (h / g);
printf("%lld\n", x);
}
return 0;
}