模运算
- 格式:docx
- 大小:35.27 KB
- 文档页数:5
数论与模运算重要概念解析数论是研究整数性质的数学分支,与数学的其他领域相辅相成。
在数论中,模运算是一项重要的工具和概念。
本文将对数论和模运算的重要概念进行解析,帮助读者更好地理解这两个领域。
一、数论的基本概念1. 整数:整数是自然数、零和它们的负数的总称。
在数论中,我们主要研究整数的性质和规律。
2. 素数:素数是指除了1和本身外,没有其他正因数的整数。
素数在数论中有着重要的地位,如质因数分解等概念和应用。
3. 同余:同余是数论中的一个重要概念,表示两个整数除以同一个数的余数相同。
例如,当两个整数除以3的余数相同时,我们可以说它们是模3同余的。
4. 最大公约数:最大公约数是指两个或多个整数共有的最大因数。
最大公约数在数论中常用于简化分数、求解同余方程等。
5. 同余方程:同余方程是形如ax ≡ b (mod m)的方程,其中a、b、m为整数。
同余方程在密码学、模运算等领域有广泛的应用。
二、模运算的基本概念1. 模运算定义:对于给定的正整数m,我们定义a mod m为a除以m所得的余数。
例如,8 mod 3 = 2 表示8除以3的余数为2。
2. 同余运算:同余运算是模运算的一种应用,表示两个数模m同余。
如果a mod m = b mod m,我们可以说a和b在模m下同余。
3. 模反元素:对于给定的正整数m和整数a,如果存在整数x,使得ax ≡ 1 (mod m),则称x为a在模m下的模反元素。
模反元素在密码学中有重要的应用。
4. 模运算的性质:模运算具有以下性质:加法、减法、乘法都满足结合律和分配律;除法则不一定满足结合律。
三、数论与模运算的应用1. 密码学:数论和模运算在密码学中有广泛的应用。
例如,RSA加密算法就是基于模运算和数论的原理建立的。
2. 素数判定:数论中有多种方法可以用于素数判定,其中一种常用的方法是Miller-Rabin素性测试。
通过模运算,我们可以更高效地判定一个数是否为素数。
3. 费马小定理:费马小定理是数论中的重要定理之一,它给出了一种判断给定数是否为素数的方法。
/jojoke/archive/2007/12/17/1003594.html模运算2009-7-16很多地方用到模运算,这里说明模运算的一些规律,并加以证明。
后续会对这些理论实际的应用加以记录和说明。
1. 模运算是取余运算(记做% 或者mod),具有周期性的特点。
m%n的意思是n除m后的余数,当m递增时m%n呈现周期性特点,并且n越大,周期越长,周期等于n。
例如0 % 20 = 0,1 % 20 = 1,2 % 20 = 2,3 % 20 = 3,...,19 % 20 = 1920 % 20 = 0,21 % 20 = 1,22 % 20 = 2,23 % 20 = 3,...,39 % 20 = 192. 如果 m % n = r,那么可以推出如下等式m = k * n + r (k为大于等于0的整数,r <= m)3. 同余式,表示正整数a,b对n取模,它们的余数相同,记做a ≡ b mod n或者a = b (mod n)。
根据2的等式可以推出a = kn + b 或者a - b = kn证明:∵ a = k1 * n + r1b = k2 * n + r2∴a - b = (k1 - k2) * n + (r1 - r2)a = k * n + (r1 - r2) + b∵a, b对n取模同余,r1 = r2∴a = k * n + b (k = k1 - k2)4. 模运算规则,模运算与基本四则运算有些相似,但是除法例外。
其规则如下(a + b) % n = (a % n + b % n) % n (1)(a - b) % n = (a % n - b % n) % n (2)(a * b) % n = (a % n) * (b % n) % n (3)a b % n = ((a % n)b) % n (4)(《ACM》P237规则有错,已改之)(1)式证明∵a = k1*n + r1b = k2*n + r2a % n = r1b % n = r2∴(a+b) % n = ((k1+k2)*n + (r1+r2)) % n = (r1+r2) % n = (a % n + b % n)% n得证(2)式证明同上(3)式证明a = k1*n + r1b = k2*n + r2(a*b) % n = (k1k2n2 + (k1r2+k2r1)n + r1r2) % n = r1r2 % n = (a %n)*(b %n ) % n{此处已作改正,原为:(a %n * b %n ) % n ,但,(a %n)*(b %n ) % n不等于(a %n * b %n ) % n 。
逆元与模运算在数学中,逆元和模运算是常见的概念,在代数和数论等领域中有着广泛的应用。
本文将介绍逆元和模运算的概念、性质以及其在数学和计算机科学中的应用。
一、逆元的概念和性质1. 逆元的定义在数学中,对于整数a、b(b≠0)和模数m(m≠0),如果存在整数x,使得ax ≡ 1 (mod m),那么称x为a关于模m的逆元,记为x ≡ a^-1 (mod m)。
2. 逆元的性质(1)逆元的存在性:如果a关于模m有逆元,那么这个逆元是唯一的。
(2)逆元的计算:根据扩展欧几里得算法,可以求出整数a在模m下的逆元x。
二、模运算的概念和性质1. 模运算的定义模运算是指将数学运算限制在某一个模数下进行,即在整数除法中只保留余数部分。
对于整数a、b(b≠0)和模数m(m≠0),模运算可以表示为a ≡ b (mod m)。
2. 模运算的性质(1)加法性质:对于模数m,有 (a+b) mod m = (a mod m + b modm ) mod m。
(2)减法性质:对于模数m,有 (a-b) mod m = (a mod m - b mod m ) mod m。
(3)乘法性质:对于模数m,有 (a*b) mod m = (a mod m * b modm ) mod m。
(4)幂运算性质:对于模数m,有 a^k mod m = (a mod m)^k mod m。
三、逆元和模运算的应用1. 线性同余方程逆元和模运算在解线性同余方程中起着重要的作用。
线性同余方程是指形如ax ≡ b (mod m)的方程,其中a、b、m为已知数,x为未知数。
通过计算逆元和应用模运算的性质,可以求解出线性同余方程的解。
2. 密码学逆元和模运算在密码学中有广泛的应用。
例如RSA加密算法中,通过选择适当的素数和模数以及求解逆元,可以进行加密和解密操作。
3. 离散对数问题离散对数问题是指找出满足a^x ≡ b (mod m)的整数x。
求解离散对数问题是一项困难的计算问题,其复杂度与逆元和模运算密切相关。
数学中的模运算一、模运算的概念与性质模运算是一种特殊的整数运算方式,它是数论中的重要分支。
在模运算中,我们可以通过取余数来表示运算结果,例如a mod b表示a 除以b的余数。
模运算具有以下性质:1. 同余性质:若a与b对模m同余(记作a≡b(mod m)),则a 与b在模m下的余数相等。
同余关系满足以下性质:- 自反性:a≡a(mod m)- 反对称性:若a≡b(mod m),则b≡a(mod m)- 传递性:若a≡b(mod m)且b≡c(mod m),则a≡c(mod m)2. 模运算的加法性质:若a≡b(mod m)且c≡d(mod m),则a+c≡b+d(mod m)3. 模运算的乘法性质:若a≡b(mod m)且c≡d(mod m),则a×c≡b×d(mod m)4. 模运算的幂运算性质:对于任意整数a和非负整数n,有以下等式成立:- a^n≡(a mod m)^n(mod m)二、模运算的应用1. 同余方程:同余方程是模运算的重要应用之一。
同余方程的一般形式为ax≡b(mod m),其中a、b和m为已知整数,x为未知整数。
解同余方程的关键是求解x的值,满足方程使得等式成立。
2. 模逆元:模逆元是指在模m下,与整数a相乘恰好等于1的整数。
简单来说,若存在一个整数x,满足ax≡1(mod m),则称x为a 在模m下的模逆元。
模逆元在密码学、线性代数等领域有广泛应用。
3. 同余定理:同余定理是模运算中的重要定理之一,包括费马小定理和中国剩余定理。
- 费马小定理:若p为素数,且不整除整数a,则a^(p-1)≡1(mod p)- 中国剩余定理:若m1、m2、...、mn为两两互质的正整数,且a1、a2、...、an为任意整数,则以下同余方程存在解:- x≡a1(mod m1)- x≡a2(mod m2)- x≡an(mod mn)三、模运算的例题分析例题1:求解同余方程3x≡2(mod 5)解:根据同余方程的性质,我们可以通过试探法求解。
模运算的应用与分析方法模运算是数学中的一种特殊运算,它将一个数对于另一个数取余数,最终得到的结果就是模数。
在实际应用中,模运算有着广泛的应用领域,比如密码学、计算机科学、编程和数字信号处理等方面。
本文将从不同角度阐述模运算的应用和分析方法,以及在实际问题中的求解技巧。
一、基础概念1.1 模运算模运算又叫取模运算,是一种常见的整数运算,可以表示成下面的公式:a mod n = r其中,“a”表示被取模的数,“n”表示模数,“r”表示运算的结果,即“a”模“n”的余数。
模运算的值域在0到n-1之间,因为如果“a”大于等于“n”时,就会将“a”的值减去“n”,直到得到在值域内的结果。
1.2 同余关系如果两个整数的模运算结果相同,那么它们就满足同余关系,可表示为:a ≡b (mod n)这个式子可以理解为:如果“a”模“n”的余数和“b”模“n”的余数相等,那么就成立同余关系。
同余关系是模运算的基石,因为它可以用于证明模运算的一些基础性质。
1.3 模运算的基本性质在模运算中,有几个基本性质是需要注意的:(1)加法的分配律:(a+b) mod n = (a mod n + b mod n) mod n(2)乘法的分配律:(ab) mod n = [(a mod n)(b mod n)] mod n(3)指数幂的乘法公式:(a^k) mod n = [(a mod n)^k] mod n这些性质可以用来简化模运算的计算,特别是对于大数运算,这些简化计算方法可以大大减少计算时间和空间复杂度。
二、模运算在密码学中的应用现在的信息安全主要依赖于密码算法以及密钥的安全性,而模运算是数字密码学中最常见的数学方法之一。
下面介绍几种常见的密码技术及其应用。
2.1 RSA算法RSA算法是常用于互联网上数据加密和数字签名的非对称密钥算法。
该算法的核心思想便是当你有一个非常庞大的数时,计算该数的质因数是一项艰难而长期的任务,因为这需要进行巨量的计算。
二进制mod运算规则
二进制MOD运算规则与四则运算中的模运算相同,即求余数。
以下是二进制MOD运算的基本规则:
1. 二进制数的模运算使用按位异或运算(XOR)进行取余操作,而不是普通的加法和减法。
2. 二进制数的模运算不考虑进位和借位,即模运算是一种无进位的二进制运算。
3. 对于任意两个二进制位A和B,A MOD B的结果只取决于A和B 的最低有效位(LSB),与其他位无关。
4. 在二进制数的模运算中,如果被除数的最低有效位为0,则余数也为0;如果被除数的最低有效位为1,则余数与除数相同。
5. 对于任意一个二进制数X,X MOD 2的结果总是等于X的最低有效位的值。
根据以上规则,我们可以使用按位异或运算来进行二进制数的模运算。
例如,假设我们要计算3 MOD 5,在二进制中可以表示为:0101 MOD 1011,结果为:0001(二进制),即1(十进制)。
希望对您有所帮助!。
mod运算
mod运算是一种常见的数学运算,它的英文名称是modulo,也叫取模运算。
它
的运算符号是“%”,表示取余数。
mod运算的定义是:给定两个整数a和b,a mod b的结果是a除以b的余数。
比如,7 mod 3的结果是1,因为7除以3的余数是1。
mod运算有很多应用,比如在编程中,可以用它来求某个数是否能被另一个数
整除,比如,如果要判断一个数是否能被3整除,可以用这个数对3取模,如果结果是0,就说明这个数能被3整除。
mod运算还可以用来求模,比如,如果要求一个数对7取模,可以用这个数对
7取模,结果就是这个数对7取模的结果。
mod运算还可以用来求模运算,比如,如果要求一个数的平方根,可以用这个
数对2取模,结果就是这个数的平方根。
总之,mod运算是一种常见的数学运算,它的运算符号是“%”,它的定义是:给定两个整数a和b,a mod b的结果是a除以b的余数。
它有很多应用,比如可
以用来求某个数是否能被另一个数整除,也可以用来求模运算,比如求某个数的平方根。
向量的模运算的所有公式1.二维向量的模运算公式:- 对于二维向量 `A = (A1, A2)`,其模定义为:,A, = sqrt(A1^2 + A2^2)- 同理,可以推广到三维向量:,A, = sqrt(A1^2 + A2^2 + A3^2)2.向量的模运算具有以下特性:-非负性:,A,>=0,即向量的模为非负实数。
-零向量的模:,0,=0,其中零向量为所有分量均为0的向量。
-单位向量的模:,u,=1,其中单位向量指模为1的向量。
3.向量模的计算:- 对于二维向量 `A = (A1, A2)`,可以利用勾股定理计算其模:,A,= sqrt(A1^2 + A2^2)-对于三维向量也可以采用类似的方法计算。
4.归一化向量:-将一个向量除以其模就可以得到一个方向相同但长度为1的向量,这个过程称为归一化。
-设向量A的模为,A,则归一化向量定义为:u=A/,A-归一化向量也称为单位向量,它的模始终为1,可以表示向量的方向。
5.求向量的模的乘积:-对于两个向量A和B,它们的模的乘积可以定义为:,A,*,B-这个定义用于计算两个向量的模的乘积。
-注意,这里的乘积只是两个实数相乘,并没有进行向量的点乘或叉乘运算。
6.向量的模运算与向量的加法、点乘和叉乘的关系:-对于两个向量A和B,有以下关系:*,A+B,^2=,A,^2+,B,^2+2(A·B)*,A-B,^2=,A,^2+,B,^2-2(A·B)*,A×B,^2=,A,^2,B,^2-(A·B)^27.应用于向量投影:-向量的模运算也可以应用于向量的投影中。
- 对于一个向量A,它在另一个向量B上的投影长度可以计算为:projB(A) = (A · B) / ,B这些是向量的模运算的一些重要公式和性质,它们在解决数学和物理学中的向量问题时非常有用。
掌握了这些公式和性质,对于理解向量的长度和方向,以及进行向量相关计算具有重要意义。
数论中的同余定理与模运算数论是数学的一个分支,研究整数的性质和结构。
数论中,同余定理和模运算是重要的概念和工具。
本文将介绍同余定理的概念、模运算的定义和性质,并通过例子说明它们在数论中的应用。
一、同余定理同余定理是数论中的基本概念,它描述了两个整数在给定模数下的余数关系。
在数学中,我们用符号“≡”表示同余关系。
1. 同余关系的定义对于给定的正整数m,如果两个整数a和b满足a-b能被m整除,我们就说a与b在模m下同余,记作a ≡ b (mod m)。
例如,对于任意整数a,有a ≡ 0 (mod 2),即a与0在模2下同余;有a ≡ 1 (mod 3),即a与1在模3下同余。
2. 同余关系的性质同余关系具有以下性质:(1)自反性:对于任意整数a,有a ≡ a (mod m)。
(2)对称性:如果a ≡ b (mod m),则b ≡ a (mod m)。
(3)传递性:如果a ≡ b (mod m)且b ≡ c (mod m),则a ≡ c (mod m)。
这些性质使得同余关系成为一个等价关系,即它满足自反性、对称性和传递性。
二、模运算模运算是计算机科学和数论中常用的一种运算,它是同余定理的具体应用。
模运算是指将一个整数除以一个正整数,得到的余数即为模运算的结果。
1. 模运算的定义对于给定的正整数m和整数a,模运算a mod m的结果是a除以m 所得的余数。
例如,5 mod 3的结果为2,因为5除以3等于1余2。
2. 模运算的性质模运算具有以下性质:(1)加法性:(a + b) mod m = (a mod m + b mod m) mod m。
(2)乘法性:(a * b) mod m = (a mod m * b mod m) mod m。
(3)幂运算:a^n mod m = (a mod m)^n mod m。
这些性质使得模运算具有良好的性质和可计算性,经常在数论和计算机算法中得到应用。
三、同余定理与模运算的应用同余定理和模运算在数论中有许多重要的应用,这里介绍其中两个常见的应用。
离散数学是数学中的一个重要分支,它研究的是离散的结构和离散的对象,不同于传统的连续数学。
模运算与同余关系是离散数学中的重要概念和方法,它们在密码学、编码理论等领域有着广泛的应用。
模运算又称为取模运算,它是数学中常用的一种算术运算。
在模运算中,我们总是以一个正整数m为基准,对整数进行求余运算,得到的余数称为模余数。
我们可以使用符号“mod”来表示模运算,例如a mod m表示a对m取模后的结果。
具体地,对于一个整数a,它与m的模余数一定是介于0到m-1之间的整数。
例如,5 mod 4的结果是1,10 mod 7的结果是3。
模运算有着一些重要的性质,包括加法性、减法性、乘法性和指数性。
加法性指的是对于任意整数a、b和正整数m,(a + b) mod m等于((a mod m) + (b mod m)) mod m。
减法性指的是对于任意整数a、b和正整数m,(a - b) mod m 等于((a mod m) - (b mod m) + m) mod m。
乘法性指的是对于任意整数a、b和正整数m,(a * b) mod m等于((a mod m) * (b mod m)) mod m。
指数性指的是对于任意整数a和正整数m,a^k mod m等于((a mod m)^k) mod m。
这些性质使得模运算成为了离散数学中非常有用的工具。
同余关系是模运算的一个重要应用。
在模运算中,当两个整数对同一个正整数m取模后得到的余数相等时,我们说这两个整数对于模m同余。
同余关系常用符号“≡”来表示,例如a ≡ b (mod m)表示a和b对m取模后得到的余数相等。
同余关系具有等价关系的性质,即自反性、对称性和传递性。
自反性指的是对于任意整数a和正整数m,a ≡ a (mod m)恒成立。
对称性指的是对于任意整数a和b,如果a ≡ b (mod m),那么b ≡ a (mod m)也成立。
传递性指的是对于任意整数a、b和c,如果a ≡ b (mod m)且b ≡ c (mod m),那么a ≡ c (mod m)也成立。
模运算“模”是“Mod”的音译,模运算多应用于程序编写中。
Mod的含义为求余。
模运算在数论和程序设计中都有着广泛的应用,从奇偶数的判别到素数的判别,从模幂运算到最大公约数的求法,从孙子问题到凯撒密码问题,无不充斥着模运算的身影。
虽然很多数论教材上对模运算都有一定的介绍,但多数都是以纯理论为主,对于模运算在程序设计中的应用涉及不多。
∙中文名模运算∙外文名Mod∙概述计算机编写程序∙领域数论和程序设计∙类型以纯理论为主举例11 Mod 2,值为1上述模运算多用于程序编写,举一例来说明模运算的原理:Turbo Pascal对mod的解释是这样的:A Mod B=A-(A div B) *B (div含义为整除)[1]概念及性质本文以c++语言为载体,对基本的模运算应用进行了分析和程序设计,以理论和实际相结合的方法向大家介绍模运算的基本应用。
基本概念给定一个正整数,任意一个整数,一定存在等式;其中、是整数,且,称为除以的商,为除以的余数。
对于正整数和整数 , ,定义如下运算:取模运算:a % p(或a mod p),表示a除以p的余数。
模p加法:(a + b) % p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则(a + b) % p = r。
模p减法:(a-b) % p ,其结果是a-b算术差除以p的余数。
模p乘法:(a * b) % p,其结果是 a * b算术乘法除以p的余数。
说明:1.同余式:正整数a,b对p取模,它们的余数相同,记做a ≡ b % p或者a ≡ b (mod p)。
2. n % p得到结果的正负由被除数n决定,与p无关。
例如:7%4 = 3, -7%4 = -3, 7%-4 = 3, -7%-4 = -3(在java、C/C++中%是取余,在python是模运算,此处%按取余处理)。
基本性质(1)若p|(a-b),则a≡b (% p)。
例如11 ≡ 4 (% 7),18 ≡ 4(% 7)(2)(a % p)=(b % p)意味a≡b (% p)(3)对称性:a≡b (% p)等价于b≡a (% p)(4)传递性:若a≡b (% p)且b≡c (% p) ,则a≡c (% p)运算规则模运算与基本四则运算有些相似,但是除法例外。
其规则如下:(a + b) % p = (a % p + b % p) % p (1)(a - b) % p = (a % p - b % p) % p (2)(a * b) % p = (a % p * b % p) % p (3)(a^b) % p = ((a % p)^b) % p (4)结合律:((a+b) % p + c) % p = (a + (b+c) % p) % p (5)((a*b) % p * c)% p = (a * b*c) % p (6)// (a%p*b)%p=(a*b)%p交换律:(a + b) % p = (b+a) % p (7)(a * b) % p = (b * a) % p (8)分配律:((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)重要定理:若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10)若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)若a≡b (% p),c≡d (% p),则(a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p);(12)基本应用判别奇偶数奇偶数的判别是模运算最基本的应用,也非常简单。
易知一个整数n对2取模,如果余数为0,则表示n为偶数,否则n为奇数。
C++实现功能函数:/*函数名:IsEven函数功能:判别整数n的奇偶性。
能被2整除为偶数,否则为奇数输入值:int n,整数n返回值:bool,若整数n是偶数,返回true,否则返回false*/bool IsEven(int n){return !(n%2);}判别素数一个数,如果只有1和它本身两个因数,这样的数叫做质数(或素数)。
例如 2,3,5,7 是质数,而 4,6,8,9 则不是,后者称为合成数或合数。
判断某个自然数是否是素数最常用的方法就是试除法:用比该自然数的平方根小的正整数去除这个自然数,若该自然数能被整除,则说明其非素数。
C++实现功能函数:/*函数名:IsPrime函数功能:判别自然数n是否为素数。
输入值:int n,自然数n返回值:bool,若自然数n是素数,返回true,否则返回false*/#include<math.h>bool IsPrime(unsigned n){unsigned maxFactor = sqrt(n); //n的最大因子for (unsigned i = 2 ; i <= maxFactor ; i++){if (!(n % i)) //n能被i整除,则说明n非素数return false;}return true;}最大公约数求最大公约数最常见的方法是欧几里德算法(又称辗转相除法),其计算原理依赖于定理:gcd(a,b) = gcd(b,a mod b)证明:a可以表示成a = kb + r,则r = a mod b假设d是a,b的一个公约数,则有d|a, d|b,而r = a - kb,因此d|r因此d是(b,a mod b)的公约数假设d 是(b,a mod b)的公约数,则d | b , d |r ,但是a = kb +r因此d也是(a,b)的公约数因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。
C++实现功能函数:/*函数功能:利用欧几里德算法,采用递归方式,求两个自然数的最大公约数函数名:Gcd输入值:unsigned int a,自然数aunsigned int b,自然数b返回值:unsigned int,两个自然数的最大公约数*/unsigned Gcd(unsigned a , unsigned b){if (b)return Gcd(b , a % b);return a;}/*函数功能:利用欧几里德算法,采用迭代方式,求两个自然数的最大公约数函数名:Gcd输入值:unsigned int a,自然数aunsigned int b,自然数b返回值:unsigned int,两个自然数的最大公约数*/unsigned Gcd(unsigned a , unsigned b){unsigned temp;while (b){temp = a % b;a = b;b = temp;}return a;}模幂运算利用模运算的运算规则,我们可以使某些计算得到简化。
例如,我们想知道3333^5555的末位是什么。
很明显不可能直接把3333^5555的结果计算出来,那样太大了。
但我们想要确定的是3333^5555(%10),所以问题就简化了。
根据运算规则(4)a^b% p = ((a % p)^b) % p ,我们知道3333^5555(%10)= 3^5555(%10)。
由于3^4 = 81,所以3^4(%10)= 1。
根据运算规则(3) (a * b) % p = (a % p * b % p) % p ,由于5555 = 4 * 1388 + 3,我们得到3^5555(%10)=(3^(4*1388) * 3^3)(%10)=((3^(4*1388)(%10)* 3^3(%10))(%10)=(1 * 7)(%10)= 7。
计算完毕。
利用这些规则我们可以有效地计算X^N(% P)。
简单的算法是将result初始化为1,然后重复将result乘以X,每次乘法之后应用%运算符(这样使得result的值变小,以免溢出),执行N次相乘后,result就是我们要找的答案。
这样对于较小的N值来说,实现是合理的,但是当N的值很大时,需要计算很长时间,是不切实际的。
下面的结论可以得到一种更好的算法。
如果N是偶数,那么X^N =(X*X)^[N/2];如果N是奇数,那么X^N = X*X^(N-1) = X *(X*X)^[N/2];其中[N]是指小于或等于N的最大整数。
C++实现功能函数:/*函数功能:利用模运算规则,采用递归方式,计算X^N(% P)函数名:PowerMod输入值:unsigned int x,底数xunsigned int n,指数nunsigned int p,模p返回值:unsigned int,X^N(% P)的结果*/unsigned PowerMod(unsigned x , unsigned n , unsigned p){if (!n)return 1;unsigned temp = PowerMod((x * x) % p , n >> 1 , p); //递归计算(X*X)^[N/2]if (n & 1) //判断n的奇偶性temp = (temp * x) % p;return temp;}孙子问题(中国剩余定理)在我国古代算书《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”意思是,“一个数除以3余2,除以5余3,除以7余2.求适合这个条件的最小数。
”这个问题称为“孙子问题”。
关于孙子问题的一般解法,国际上称为“中国剩余定理”。
我国古代学者早就研究过这个问题。
例如我国明朝数学家程大位在他著的《算法统宗》(1593年)中就用四句很通俗的口诀暗示了此题的解法:三人同行七十稀,五树梅花廿一支,七子团圆正半月,除百零五便得知。
"正半月"暗指15。
"除百零五"的原意是,当所得的数比105大时,就105、105地往下减,使之小于105;这相当于用105去除,求出余数。
这四句口诀暗示的意思是:当除数分别是3、5、7时,用70乘以用3除的余数,用21乘以用5除的余数,用15乘以用7除的余数,然后把这三个乘积相加。
加得的结果如果比105大,就除以105,所得的余数就是满足题目要求的最小正整数解。
根据剩余定理,可以把此种解法推广到有n(n为自然数)个除数对应n个余数,求最小被除数的情况。
输入n个除数(除数不能互相整除)和对应的余数,计算机将输出最小被除数。
C++实现功能函数:/*函数名:ResidueTheorem函数功能:运用剩余定理,解决推广了的孙子问题。