主要得理解拓展gcd传送门
附上代码:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll ex_gcd(ll a,ll b,ll &x,ll &y)
{
if(b==0){
x=1;
y=0;
return a;
}else{
ll x1,y1;
ll d=ex_gcd(b,a%b,x1,y1);
x=y1;
y=(x1-(a/b)*y1);
return d;
}
}
ll modular_liner_equation(ll a,ll b,ll n)
{
ll x,y,x0;
ll d=ex_gcd(a,n,x,y);
if(b%d){
return -1;
}
x0=(x*(b/d))%n;
ll ans=x0,s=n/d;
ans=(ans%s+s)%s;
return ans;
}
int main()
{
ll A,B,C,K;
while(cin>>A>>B>>C>>K&&(A||B||C||K)){
ll a=C;
ll b=B-A;
ll n=1LL<<K;
ll ans=modular_liner_equation(a,b,n);
if(ans==-1){
cout<<"FOREVER"<<endl;
}else{
cout<<ans<<endl;
}
}
return 0;
}