[poj] 2115 C Looooops
原题
ex_gcd板子题
\(cx+2^ky=b-a(mod 2^k)\)
#include<cstdio>
typedef long long ll;
using namespace std;
ll a,b,c,k,m[40],x,y,gg,A,B,C;
ll ex_gcd(ll a,ll b,ll &x,ll &y)
{
    if (!b)
    {
	x=1;
	y=0;
	return a;
    }
    int r=ex_gcd(b,a%b,y,x);
    y-=a/b*x;
    return r;
}
int main()
{
    m[0]=1;
    for (int i=1;i<=32;i++) m[i]=m[i-1]*2;
    while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&k))
    {
	if (!a && !b && !c && !k) break;
	A=c;
	B=m[k];
	C=(b-a+m[k])%m[k];
	gg=ex_gcd(A,B,x,y);
	if (C%gg)
	{
	    printf("FOREVER\n");
	    continue;
	}
	A/=gg;
	B/=gg;
	C/=gg;
	x=(x*C%B+B)%B;
	printf("%lld\n",x);
    }
    return 0;
}

                
            
        
浙公网安备 33010602011771号