首页 > 其他 > 详细

解一元同余方程组

时间:2016-01-26 11:53:56      阅读:271      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!