一个小问题~~线性同余方程组

链接: https://www.nowcoder.net/acm/contest/75/B
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

uu遇到了一个小问题,可是他不想答。你能替他解决这个问题吗?
问题:给你k对a和r是否存在一个正整数x使每队a和r都满足:x mod a=r,求最小正解x或无解。


输入描述:

第一行是正整数k(k<=100000)
接下来k行,每行有俩个正整数a,r(100000>a>r>=0)

输出描述:

在每个测试用例输出非负整数m,占一行。
如果有多个可能的值,输出最小的值。
如果没有可能的值,则输出-1。

     一个传统的线性同余方程组~~偶尔间看到了大佬的题解~记录下来观赏一番;
    

    
#include 
#include
using namespace std;
#define LL long long
const LL maxn = 20;
//拓展欧几里得定理,求ax+by=gcd(a,b)的一组解(x,y),d=gcd(a,b)
void exGcd(LL a, LL b, LL &d, LL &x, LL &y)
{
	if (b == 0)
	{
		d = a;
		x = 1;
		y = 0;
	}
	else
	{ 
		exGcd(b, a%b, d, y, x);
		y = y- x*(a / b);
	}
}
LL Chinese_Remainder(LL n, LL a[], LL b[])
{
	LL m1, r1, m2, r2, flag = 0, i, d, x, y, c, t;
	m1 = a[0], r1 = b[0];
	flag = 0;
	for (i = 1; i> n;
	if (n > 20) 
	{
		cout << -1 << endl;
		return 0;
	}
	for (i = 0; i < n; i++)
		cin >> a[i] >> b[i];
	cout << Chinese_Remainder(n, a, b) << endl;
	return 0;
}


你可能感兴趣的:(一个小问题~~线性同余方程组)