poj2115 C Looooops
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
__int64 x,y;
__int64 exgcd(__int64 a,__int64 b)
{
__int64 t,gcd;
if(b==0)
{
x=1;
y=0;
return a;
}
gcd=exgcd(b,a%b);
t=x;
x=y;
y=t-a/b*y;
return gcd;
}
__int64 po(__int64 d)
{
__int64 res=1;
__int64 i;
for(i=0;i<d;i++)
{
res*=2;
}
return res;
}
int main()
{
__int64 a,b,c,d;
__int64 gcd;
while(scanf("%I64d %I64d %I64d %I64d",&a,&b,&c,&d),a||b||c||d)
{
d=po(d);
gcd=exgcd(c,d);
if((b-a)%gcd!=0)
{
printf("FOREVER\n");
continue;
}
x=x*(b-a)/gcd;
x=x%(d/gcd);
if(x<0)
{
x+=(d/gcd);
}
printf("%I64d\n",x);
}
//system("PAUSE");
return 0;
}