获得详细分析:点击打开链接
贴个代码:
#include<stdio.h>
typedef long long LL;
LL exgcd(LL a,LL b,LL &x,LL &y)
{
if(b==0){
x=1;
y=0;
return a;
}
LL d=exgcd(b,a%b,x,y);
LL tmp=x;
x=y;
y=tmp-a/b*y;
return d;
}
int main()
{
LL A,B,C,k;
while(scanf("%lld%lld%lld%lld",&A,&B,&C,&k),(A||B||C||k)){
LL a=C;
LL b=B-A;
LL n=(LL)1<<k;
LL x,y;
LL d=exgcd(a,n,x,y);
if(b%d){
puts("FOREVER");
continue;
}
x=(x*(b/d))%n;
x=((x%(n/d))+n/d)%(n/d);
printf("%lld\n",x);
}
return 0;
}