`

模线性方程组-非互质中国剩余定理 (更新于2012/5/18)

阅读更多
KIDx 的解题报告
该专题必备知识:解模线性方程
http://972169909-qq-com.iteye.com/blog/1104538
以下原创
转载请指明作者 (KIDx) 以及 文章地址:

http://972169909-qq-com.iteye.com/blog/1266328



问题描述:给出bi,ni的值,且n1, n2, n3,…, ni两两之间不一定互质,求Res的值?
解:采用的是合并方程的做法。
这里将以合并第一第二个方程为例进行说明

由上图前2个方程得(设k1、k2为某一整数):





例题: hdu 1573 X问题 【下面已给出代码】
http://acm.hdu.edu.cn/showproblem.php?pid=1573
另外推荐一题: hdu 3579 Hello Kiki:
http://acm.hdu.edu.cn/showproblem.php?pid=3579

#include <iostream>
using namespace std;
#define LL __int64
#define M 10
int N;

LL Egcd (LL a, LL b, LL &x, LL &y)
{
	if (b == 0)
	{
		x = 1, y = 0;
		return a;
	}
	LL d, tp;
	d = Egcd (b, a%b, x, y);
	tp = x;
	x = y;
	y = tp - a/b*y;
	return d;
}

LL CRT2 (LL b[], LL n[], int num)
{
	int i;
	bool flag = false;
	LL n1 = n[0], n2, b1 = b[0], b2, bb, d, t, k, x, y;
	for (i = 1; i < num; i++)
	{
		n2 = n[i], b2 = b[i];
		bb = b2 - b1;
		d = Egcd (n1, n2, x, y);
		if (bb % d)		//模线性解k1时发现无解
		{
			flag = true;
			break;
		}
		k = bb / d * x;    //相当于求上面所说的k1【模线性方程】
		t = n2 / d;
		if (t < 0) t = -t;
		k = (k % t + t) % t;	//相当于求上面的K`
		b1 = b1 + n1*k;
		n1 = n1 / d * n2;
	}
	if (flag)
		return 0;			//无解
/******************求正整数解******************/
	if (b1 == 0)	//如果解为0,而题目要正整数解,显然不行
		b1 = n1;	//n1刚好为所有ni的最小公倍数,就是解了
/******************求正整数解******************/
	if (b1 > N)
		return 0;
	return (N-b1)/n1+1;    //形成的解:b1, b1+n1, b1+2n1,..., b1+xni...
}

int main()
{
	int t, num, i, cc = 1;
	LL b[M], n[M];
	scanf ("%d", &t);
	while (t--)
	{
		scanf ("%d%d", &N, &num);
		for (i = 0; i < num; i++)
			scanf ("%I64d", n+i);
		for (i = 0; i < num; i++)
			scanf ("%I64d", b+i);
		printf ("%I64d\n", CRT2 (b, n, num));
	}
	return 0;
}
  • 大小: 1.9 KB
  • 大小: 18.1 KB
  • 大小: 20.3 KB
  • 大小: 50.9 KB
3
0
分享到:
评论
1 楼 yzmduncan 2011-12-22  
好文章!赞一个

相关推荐

    算法-数论- 线性同余方程组与中国剩余定理.rar

    线性同余方程组和中国剩余定理是数论中的重要概念,它们在密码学、计算机科学和数学的多个领域都有广泛的应用。线性同余方程组是一类特殊的数学问题,而中国剩余定理则是解决这类问题的理论基础。 线性同余方程组的...

    求解模线性方程方程的算法

    对于模线性同余方程组,例如`ax = b (mod n)`和`cx = d (mod n)`,可以使用中国剩余定理(Chinese Remainder Theorem, CRT)求解。CRT指出,如果`n = p1 * p2 * ... * pk`是若干质数的乘积,并且方程对每个质因子`pi...

    POJ1006-Biorhythms【中国剩余定理】

    中国剩余定理(Chinese Remainder Theorem,CRT)是数论中的一个重要结果,它解决了以下一类模线性同余方程组的问题: x ≡ a1 (mod m1) x ≡ a2 (mod m2) ... x ≡ an (mod mn) 其中,a1, a2, ..., an 和 m1, m2,...

    中国剩余定理 cpp实现

    中国剩余定理(Chinese Remainder Theorem,CRT)是数论中的一个重要概念,它解决了在模线性同余方程组中的求解问题。在实际应用中,中国剩余定理被广泛应用于密码学、编码理论、计算数学以及计算机科学的多个领域。...

    acm 扩展欧几里德算法与中国剩余定理ppt教程 acmer教程系列

    中国剩余定理是指求解模线性方程组的方法,即求解一组方程 a ≡ B[1] (mod W[1]), a ≡ B[2] (mod W[2]), …, a ≡ B[n] (mod W[n]),其中 W[i] 互质。其原理基于扩展欧几里德算法,即可以将每个方程转化为一个扩展...

    C++ 求解中国剩余定理的实现

    中国剩余定理(Chinese Remainder Theorem,CRT)是数论中的一个重要概念,它解决了在模线性同余方程组中的求解问题。在实际应用中,如密码学、编码理论、计算机科学等领域,中国剩余定理都有广泛的应用。在C++中,...

    2_中国剩余定理_信息安全数学基础_

    在提供的压缩包文件中,可能包含了实现中国剩余定理的代码,用于解决三元模线性同余方程组。这样的代码通常会包含对扩展欧几里得算法的实现,以及逆元和最终解的计算过程。通过对这些代码的分析和学习,我们可以更好...

    Mathematica程序 中国剩余定理_mathematica_

    中国剩余定理(Chinese Remainder Theorem,简称CRT),是数论中的一个重要定理,它解决了在模线性同余方程组的解的问题。这个定理在密码学、编码理论、计算机科学等领域有着广泛的应用。Mathematica作为一个强大的...

    中国剩余定理

    中国剩余定理(Chinese Remainder Theorem,CRT)是数论中的一个重要理论,它解决了在模线性同余方程组中的求解问题。在密码学中,中国剩余定理有着广泛的应用,尤其是在公钥密码体制如RSA和ElGamal等中起到关键作用...

    中国剩余定理仿真代码matlab

    中国剩余定理(Chinese Remainder Theorem,CRT)是数论中的一个重要概念,它解决了在模线性同余方程组中的求解问题。在实际应用中,CRT被广泛用于密码学、编码理论、计算机科学等领域,特别是在大整数分解和高效...

    密码学实验二:中国剩余定理C++实现

    中国剩余定理解决的是一个模线性同余方程组的问题,形式如下: \[ x \equiv a_1 \pmod{m_1} \] \[ x \equiv a_2 \pmod{m_2} \] \[ ... \] \[ x \equiv a_k \pmod{m_k} \] 其中,\( m_1, m_2, ..., m_k \) 是两两...

    5.“中国剩余定理”算理及其应用.rar

    《中国剩余定理》是数论中的一个重要概念,源自中国古代的数学问题,是解决一类模线性同余方程组的高效算法。该理论在密码学、编码理论、计算机科学等多个领域有着广泛的应用。以下是对“中国剩余定理”算理及其应用...

    中国剩余定理(CRT)

    中国剩余定理(Chinese Remainder Theorem,简称CRT)是数论中的一个重要概念,它解决了一类模线性同余方程组的问题。在实际应用中,特别是在密码学、计算机科学和编码理论等领域,中国剩余定理有着广泛的应用。本文...

    中国剩余定理和模平方乘算法的maple实现

    中国剩余定理(Chinese Remainder Theorem, CRT)是一种解决一系列线性同余方程的方法,它的起源可以追溯到中国数学家孙子(Sun Tsu或Sun Zi),大约生活在公元前200年至公元200年之间。传说中国军事将领曾用此方法...

    中国剩余定理mircal.zip

    中国剩余定理(Chinese Remainder Theorem,CRT)是数论中的一个重要理论,它解决了在模线性同余方程组中的求解问题。在实际应用中,尤其是在密码学、编码理论以及计算机科学中有着广泛的应用。这个压缩包“mircal....

    中国剩余定理CRT在RSA中的运用

    中国剩余定理,也称为孙子定理,是一种古老的数学原理,用于解决一组线性同余方程组。它指出,如果模数两两互质,则存在一个解满足所有这些同余关系,并且解是唯一的(模上所有模数的乘积)。在RSA加密算法中,利用...

    Chrt.zip_Chrt_rsa_rsa Remainder_中国剩余定理_密码算法

    中国剩余定理(Chinese Remainder Theorem,简称CRT),是数论中的一个重要概念,它为解决一类模线性同余方程组提供了解法。在信息技术领域,尤其是密码学中,中国剩余定理有着广泛的应用,特别是在RSA公钥加密算法...

    matlab开发-多项式的中国剩余项

    中国的剩余定理(Chinese Remainder Theorem, CRT)是数论中的一个基本定理,它描述了如何将一个模线性同余方程组的问题转化为求解单个模线性方程的问题。在数学和计算机科学中,尤其是在密码学、编码理论和算法设计...

    zhongguo.rar_不互质情况

    中国剩余定理(不互质的情况) 对互质的情况,处理起来比较方便,可以直接套模板 本题给出不互质的模线性方程组,求出满足方程的最小正整数解 方案:对于不互质的模线性方程组,可以进行方程组合并,求出合并后的方程...

Global site tag (gtag.js) - Google Analytics