poj2115-C Looooops -线性同余方程
线性同余方程的模板题。和青蛙的约会一样。
#include <cstdio> #include <cstring> #define LL long long using namespace std; //A+n*C = B mod 2^k //n*C = B-A mod 2^k LL A,B,C,MOD; int k; LL ExGCD(LL a,LL b,LL &x,LL &y) { LL d,t; if(b==0) { x=1;y=0; return a; } d = ExGCD(b,a%b,x,y); t=x;x=y;y=t-a/b*y; return d; } int main() { while(scanf("%I64d%I64d%I64d%d",&A,&B,&C,&k) && (A||B||C||k)) { LL x,y; LL a=C,b=B-A; MOD = 1LL<<k; LL d = ExGCD(a,MOD,x,y); if(b%d ) { printf("FOREVER\n"); } else { x=(x*(b/d))%MOD; x=(x%(MOD/d)+MOD/d)%(MOD/d); printf("%I64d\n",x); } } }