原题
ex_gcd板子题
(cx+2^ky=b-a(mod 2^k))
#include<cstdio>
typedef long long ll;
using namespace std;
ll a,b,c,k,m[40],x,y,gg,A,B,C;
ll ex_gcd(ll a,ll b,ll &x,ll &y)
{
if (!b)
{
x=1;
y=0;
return a;
}
int r=ex_gcd(b,a%b,y,x);
y-=a/b*x;
return r;
}
int main()
{
m[0]=1;
for (int i=1;i<=32;i++) m[i]=m[i-1]*2;
while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&k))
{
if (!a && !b && !c && !k) break;
A=c;
B=m[k];
C=(b-a+m[k])%m[k];
gg=ex_gcd(A,B,x,y);
if (C%gg)
{
printf("FOREVER
");
continue;
}
A/=gg;
B/=gg;
C/=gg;
x=(x*C%B+B)%B;
printf("%lld
",x);
}
return 0;
}