您的位置:首页 > 运维架构

poj2115-C Looooops -线性同余方程

2016-01-29 22:53 351 查看
线性同余方程的模板题。和青蛙的约会一样。

#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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: