pku 2115 C Looooops(线性同余方程)
#include <stdio.h>
typedef long long LL;
LL ext_gcd(LL a,LL b,LL &x,LL &y)
{
if(!b)
{
x = 1;
y = 0;
return a;
}
LL g = ext_gcd(b,a%b,x,y);
LL t = x;
x = y;
y = t - a/b * y;
return g;
}
inline LL _abs(LL x)
{
return x > 0 ? x : -x;
}
bool solve(LL a,LL c,LL m)
{
LL g,x,y;
g = ext_gcd(a,m,x,y);
if( c % g ) return false;
x = ( c/g * x ) % m;
x %= _abs(m/g);
if(x < 0) x += _abs(m/g);
printf("%I64d\n",x);
return true;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("tdata.txt","r",stdin);
#endif
LL A,B,C,M;
int k;
while( scanf("%I64d %I64d %I64d %d",&A,&B,&C,&k),(A+B+C+k) )
{
M = (LL)1 << k;
B -= A;
if( ! solve(C, B, M) ) printf("FOREVER\n");
}
return 0;
}
浙公网安备 33010602011771号