POJ 2891 Strange Way to Express Integers(中国剩余定理)

原创 2016年05月31日 01:17:06

题目链接:
POJ 2891 Strange Way to Express Integers
题意:
给出x模m[i]的余数a[i],求x。
分析:
中国剩余定理。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <climits>
#include <cmath>
#include <ctime>
#include <cassert>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
using namespace std;
typedef long long ll;
const int MAX_M = 100100;

int M;
ll a0, m0;
ll a[MAX_M], m[MAX_M];

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

bool ModularLinearEquation(ll& m0, ll& a0, ll mm, ll aa)
{
    ll x, y, d;
    d = ex_gcd(m0, mm, x, y);
    if(labs(aa - a0) % d) return false;
    mm /= d;
    x = x * (aa - a0) / d % mm;
    a0 += x * m0;
    m0 *= mm;
    a0 = (a0 % m0 + m0) % m0;
    return true;
}

bool CRT()
{
    bool flag = true;
    m0 = 1, a0 = 0;
    for(int i = 0; i < M; i++){
        if(ModularLinearEquation(m0, a0, m[i], a[i]) == false){
            flag = false;
            break;
        }
    }
    return flag;
}

int main()
{
    while(~scanf("%d", &M)){
        for(int i = 0; i < M; i++){
            scanf("%lld%lld", &m[i], &a[i]);
        }
        if(CRT() == false) printf("-1\n");
        else printf("%lld\n", a0);
    }   
    return 0;
}
版权声明:缥缈玉京人,想语然、京兆眉妩。

相关文章推荐

中国剩余定理 poj 2891 Strange Way to Express Integers

对于同余方程组:       x=a1 (mod m1);   1       x=a2 (mod m2);    2       方程组有一个小于m(m1,m2的最小公倍数)的非负整数解的充分...

poj2891 Strange Way to Express Integers(中国剩余定理)

Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Sub...
  • z8110
  • z8110
  • 2016年04月26日 17:31
  • 242

poj 2891 Strange Way to Express Integers(扩展欧几里得,中国剩余定理)

题意:给出x%a1,x%a2……x%ak的余数r1,r2,r3……rk,求满足要求的最小的x的值。 思路:首先,满足第一个的最小解x1=r1,我们不妨先假设解为x=r1,对于第二个方程 x%a2=r...
  • qian99
  • qian99
  • 2014年02月06日 22:05
  • 494

poj2891Strange Way to Express Integers(中国剩余定理 不互斥)

Description Elina is reading a book written by Rujia Liu, which introduces a strange way to exp...

POJ 2891 Strange Way to Express Integers解线性同余方程组(中国剩余定理不互质版)

题意:给出k个模方程组:x mod ai = ri。求x的最小正值。如果不存在这样的x,那么输出-1. 题解: 由于这道题目里面的ai、ri之间不满足两两互质的性质,所以不能用中国剩余定理直接求解。 ...

POJ 2891 Strange Way to Express Integers (中国剩余定理)

题意求最小的x,满足x%m[i]=r[i]。思路裸的不互质的中国剩余定理(顺便夸一下这个CRT2的板子真的挺好用的=。=代码#include #include #include #include...

【POJ2891】Strange Way to Express Integers——中国剩余定理(非互质)

Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072KDescriptionElina is read...

POJ 2891-Strange Way to Express Integers【中国剩余定理】

Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Sub...

poj 2891 Strange Way to Express Integers 中国剩余定理

Strange Way to Express IntegersTime Limit: 1000MS Memory Limit: 131072KTotal Submissions: 4191 Accep...
  • hqd_acm
  • hqd_acm
  • 2011年02月07日 15:46
  • 2016

POJ_2891_Strange Way to Express Integers(非互质的中国剩余定理)

Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Sub...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2891 Strange Way to Express Integers(中国剩余定理)
举报原因:
原因补充:

(最多只允许输入30个字)