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

解一元同余方程组

时间:2016-01-26 11:56:39      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:

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

 

解一元同余方程组

标签:

原文地址:http://www.cnblogs.com/16er/p/5159609.html

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