题目:
题目链接:C Looooops
题解:原题可以转化为: c x ≡ b ? a ( m o d 2 k ) cx≡b-a(mod 2^{k}) cx≡b?a(mod2k),解个方程即可。
代码:
#include<stdio.h>
#define LL long long
using namespace std;
LL A,B,C,kk;
LL exgcd(LL a,LL b,LL &x,LL &y)
{
LL s,t;if(!b){
x=1,y=0;return a;}s=exgcd(b,a%b,x,y);t=x,x=y,y=t-a/b*y;return s;
}
LL gcd(LL a,LL b){
return b==0?a:gcd(b,a%b);}
int main()
{
while(1){
scanf("%lld%lld%lld%lld",&A,&B,&C,&kk);if(!A&&!B&&!C&&!kk) return 0;LL a=C,c=B-A,b=(LL)1<<kk,x,y;LL t=gcd(a,b);if(c%t!=0){
printf("FOREVER\n");continue;}a/=t; b/=t; c/=t;exgcd(a,b,x,y);x=((c*x)%b+b)%b;printf("%lld\n",x); }return 0;
}