裸线性同余方程
// C Looooops.cpp : 定义控制台应用程序的入口点。
//
//#include "stdafx.h"
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL __int64
LL ex_gcd( LL a , LL b , LL &x ,LL &y )
{
if ( b == 0 )
{
x = 1 ;
y = 0 ;
return a ;
}
else
{
LL r = ex_gcd( b , a % b , x , y ) ;
LL temp = x ;
x = y ;
y = temp - ( a / b ) * y ;
return r ;
}
}
int main()
{
LL a , b , c , d , k, A, B, C, X, Y ;
while( cin >> a >> b >> c >> k )
{
if( !a && !b && !c && !k )
break;
C = b - a;
A = c;
B = ( LL )1 << k;//小心使用这里,会爆错
d = ex_gcd( A , B ,X , Y ) ;
if( C % d != 0 )
{
cout << "FOREVER" << endl;
}
else
{
LL ans = X * C / d ;
LL temp = B / d ;
ans = ( ans % temp + temp ) % temp ;
cout << ans << endl;
}
}
return 0 ;
}