[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
");
	    continue;
	}
	A/=gg;
	B/=gg;
	C/=gg;
	x=(x*C%B+B)%B;
	printf("%lld
",x);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/mrha/p/7929790.html