您的位置:首页 > 其它

POJ 2891 Strange Way to Express Integers

2015-01-17 21:17 330 查看
模线性同余方程组的求解

#include <cstdio>
#include <cstring>

using namespace std;
const int N = 1005;

#define ll long long
ll a
, b
;

ll ex_gcd(ll a , ll &x , ll b , ll &y)
{
if(b == 0){
x = 1 , y = 0;
return a;
}
ll ans = ex_gcd(b , x , a%b , y);
ll t = x;
x= y , y = t - (a/b)*y;
return ans;
}

ll mod_line(int n)
{
ll r = b[0] , lcm = a[0] , x , y;
for(int i = 1 ; i<n ; i++)
{
ll del = b[i] - r;
ll g = ex_gcd(lcm , x , a[i] , y);
if(del % g != 0) return -1;
ll Mod = a[i] / g;
x = ((x*del/g % Mod) + Mod)%Mod;
r = r + lcm*x;
lcm = lcm*a[i]/g;
r %= lcm;
}
return r;
}

int main()
{
// freopen("a.in" , "r" , stdin);
int n;
while(scanf("%d" , &n) == 1)
{
for(int i= 0 ; i<n ; i++)
scanf("%I64d%I64d" , a+i , b+i);
printf("%I64d\n" , mod_line(n));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: