【解题报告】POJ2115-C Looooops 线性同余方程

    技术2023-11-17  72

    线性同余方程裸题,cx=(b-a) (mod 2^k)

    AC代码:

    #include <iostream> #include <cmath> using namespace std; typedef long long LL; //扩展欧几里得 //输入a,b,任意x,y //返回ax+by=gcd(a,b)的一组特解x0,y0 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 z=x;x=y;y=z-y*(a/b); return d; } int main() { LL a,b,c,k; while(cin>>a>>b>>c>>k){ if(!a&&!b&&!c&&!k) break; k=(LL)(pow(2,k)); LL X0,Y0; LL d=exgcd(c,k,X0,Y0); if((b-a)%d!=0){ cout<<"FOREVER"<<endl; continue; } LL temp=k/d; LL X=X0*(b-a)/d; LL ans=(X%temp+temp)%temp; cout<<ans<<endl; } }
    Processed: 0.009, SQL: 9