题目
一个变量初始值为a,每次加c,取除以 的余数,使它与b相等。
分析
这道题可以变一下
移项后变成
没错,扩欧,具体解释懒得打。
代码
#include <cstdio>
using namespace std;
long long a,b,c,d,A,B,C,D,K,x,y;
long long exgcd(long long a,long long b,long long &x,long long &y){
if (b==0) d=a,x=1,y=0;
else exgcd(b,a%b,y,x),y=y-a/b*x;
}
int main(){
while (scanf("%lld%lld%lld%lld",&A,&B,&C,&K)&&(A||B||C||K)){
a=C; b=1ll<<K; c=B-A; exgcd(a,b,x,y);
if (c%d!=0) puts("FOREVER");
else{
x*=(c/d);
x=(x%(b/d)+(b/d))%(b/d);
printf("%lld\n",x);
}
}
return 0;
}