poj 2115 C Looooops

来源:互联网 发布:趣学python编程小测验 编辑:程序博客网 时间:2024/05/19 22:02

http://poj.org/problem?id=2115


#include<iostream>

#include<cstdio>
using namespace std;


__int64 r,x,y;


void EX_Eulid(__int64 a,__int64 b)
{
if(b==0)
{
x=1;y=0;r=a;
}
else
{
EX_Eulid(b,a%b);
int t=x;
x=y;
y=t-(a/b)*y;
}
}


int main()
{
__int64 count,i,A,B,C,a[35];
int k,flag,t;
a[0]=1;
for(i=1;i<=33;i++)
a[i]=2*a[i-1];
while(scanf("%I64d%I64d%I64d%d",&A,&B,&C,&k)&&A||B||C||k)//A%2^k+C*x%2^k=B%2^k--->C*x=_(B-A)(mod 2^k)
{
EX_Eulid(C,a[k]);
t=B-A;
if(t%r!=0) printf("FOREVER\n");
else
{
x=(x*(t/r))%a[k];
x=(x+a[k])%(a[k]/r);
printf("%I64d\n",x);
}
}
return 0;
}