POJ2115

题目大意

求同余方程Cx≡B-A(2^k)的最小正整数解

题解

可以转化为Cx-(2^k)y=B-A,然后用扩展欧几里得解出即可。。。

代码:

#include <iostream>
using namespace std;
typedef long long LL;
void extended_gcd(LL a,LL b,LL &d,LL &x,LL &y)
{
    if(!b)
    {
        d=a,x=1,y=0;
    }
    else
    {
        extended_gcd(b,a%b,d,y,x);
        y-=x*(a/b);
    }
}
int main()
{
    LL a,b,k,c,x,y,d,p;
    while(cin>>a>>b>>c>>k&&a+b+c+k)
    {
        p=1LL<<k;
        extended_gcd(c,p,d,x,y);
        if((b-a)%d)
        {
            cout<<"FOREVER"<<endl;
            continue;
        }
        x=x*(b-a)/d;
        x=(x%(p/d)+p/d)%(p/d);
        cout<<x<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zjbztianya/p/3229508.html