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;
}

posted @ 2012-07-12 08:49  willzhang  阅读(77)  评论(0编辑  收藏  举报