码迷,mamicode.com
首页 > 其他好文 > 详细

FZU 1402 猪的安家 中国剩余定理

时间:2015-01-17 22:11:24      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

这里每两个a[i]之间都互素 , 所以必然存在一个解 , 是一般模线性方程组中的一种特殊情况

 

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 using namespace std;
 5 const int N = 15;
 6 
 7 #define ll long long
 8 ll a[N] , b[N];
 9 
10 ll ex_gcd(ll a , ll &x , ll b , ll &y)
11 {
12     if(b == 0){
13         x = 1 , y = 0;
14         return a;
15     }
16     ll ans = ex_gcd(b , x , a%b , y);
17     ll t = x;
18     x= y , y = t - (a/b)*y;
19     return ans;
20 }
21 //因为均互素所以不必要计算比值
22 ll mod_line(int n)
23 {
24     ll r = b[0] , lcm = a[0] , x , y;
25     for(int i = 1 ; i<n ; i++)
26     {
27         ll del = b[i] - r;
28         ll g = ex_gcd(lcm , x , a[i] , y);
29 
30         x = ((x*del/g % a[i]) + a[i])%a[i];
31         r = r + lcm*x;
32         lcm = lcm*a[i];
33     }
34     return r;
35 }
36 
37 int main()
38 {
39   //  freopen("a.in" , "r" , stdin);
40     int n;
41     while(scanf("%d" , &n) == 1)
42     {
43         for(int i= 0 ; i<n ; i++)
44             scanf("%I64d%I64d" , a+i , b+i);
45         printf("%I64d\n" , mod_line(n));
46     }
47     return 0;
48 }

 

FZU 1402 猪的安家 中国剩余定理

标签:

原文地址:http://www.cnblogs.com/CSU3901130321/p/4231050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!