Luogu P1495 曹冲养猪

题意:

给你一组同余方程,并保证两两互质 求最小的满足方程的非负整数 X

X ≡ bi(mod ai)

..... .....

题解:

经典的中国剩余定理求解特殊的同余方程组。

我们可以构造这样的一组解:

令 M = ∏ ai,mi = M/ai

X‘ = ∑ (bi mi pi) (其中 pi mi ≡ 1(mod ai))

易知:X‘ 为方程的一组解

而 X 与 X‘ 属于同一个 mod M 剩余类,故有 X =(X mod M)

#include<iostream>    
#include<queue>    
using namespace std;    
typedef long long ll;  
ll extended_euclid(ll a, ll b, ll &x, ll &y) {  
    ll d;  
    if(b == 0) {x = 1; y = 0; return a;}  
    d = extended_euclid(b, a % b, y, x);  
    y -= a / b * x;  
    return d;  
}  
ll chinese_remainder(ll b[], ll w[], ll len) {   
    ll i, d, x, y, m, n, ret;  
    ret = 0; n = 1;   
    for(i=0; i < len ;i++) n *= w[i];  
    for(i=0; i < len ;i++) {   
        m = n / w[i];  
        d = extended_euclid(w[i], m, x, y);  
        ret = (ret + y*m*b[i]) % n;  
    }  
    return (n + ret%n) % n;  
}  
ll yu[100],chu[100];  
int main()  
{  
    ll n;  
    while(cin>>n)  
    {  
        for(ll i=0;i<n;i++)  
        {  
            cin>>chu[i]>>yu[i];  
        }  
        ll ans=chinese_remainder(yu,chu,n);  
        cout<<ans<<endl;  
    }  
    return 0;  
}  

猜你喜欢

转载自www.cnblogs.com/clockcleaner/p/9052814.html