解一元同余方程组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解一元同余方程组相关的知识,希望对你有一定的参考价值。

2016.1.26

 

试题描述

给定n个一次同余方程x mod mi=ai,这里i=0,1,2,……,n-1,给定数据保证所有的mi两两互素。求该方程组的解。

输入
第一行包含一个正整数n,接下来的n行,每行包括两个整数,对应一个同余方程,第一个数为mi,第二个数为ai,两数间用一个空格分隔。
输出
一个数,表示方程组的解。
输入示例
3
3 2
5 3
7 2
输出示例
23
其他说明
数据范围:所有给定的数据均在int32范围内,且保证所有的数据都符合题目描述的要求,结果在long long范围内。

 

中国剩菜定理嘛ヾ(o?∀?)?

技术分享
#include<iostream>
using namespace std;
int m[101],a[101];

void exgcd(int a,int b,int &x,int &y)
{
    if(!b) 
    {
        x=1;
        y=0;
        return;
    }
    exgcd(b,a%b,y,x);
    y=y-a/b*x;
}

int main()
{
    long long total=1,ans=0;
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&m[i],&a[i]);
        total*=m[i];
    }
    for(int i=1;i<=n;i++)
    {
        int M=total/m[i];
        int x,y;
        exgcd(M,m[i],x,y);
        ans=(ans+a[i]*M*x)%total;
    }
    printf("%d",(ans+total)%total);
    
}
View Code

 

以上是关于解一元同余方程组的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]

POJ 2115C Looooops[一元线性同余方程]

HDU1573 X问题一元线性同余方程组

NEFU 84 - 五指山 - [exgcd求解一元线性同余方程]

怎么用matlab解一元二次方程

C语言求一元二次方程解的函数问题 新手题