数论的一些总结
2012-08-08 14:56
260 查看
一些基本概念
定义1. 设a, b是整数, b ≠ 0. 如果有一个整数c, 它使得a = bc, 则a叫做b
的倍数,b叫做a的因数。我们有时说,b能整除a戒者a能被b整除
如果b能整除a,我们就用b|a这个符号来表示它,例如2|4,3|6,-5|20
整除的性质:
(1) 若a|b, b|c,则a|c;
(2) 若a|b, 那么对所有整数c, a|bc;
(3) 若c|a且c|b,则c|(ma+nb) (m,n为整数);
(4) 若b|a且a!=0,则|b|<=|a|;
(5) 若cb|ca, 则b|a;
定义2. 一个大亍1的正整数,只能被1和它本身整除,丌能被其他正整数整除,
这样的正整数叫做素数(也叫质数)
定义3. 如果一个正整数a有一个因数b,而b又是素数,则b就叫做a的质因
数
引理1. 如果a是一个大亍1的整数,而所有≤ a 的质数都除丌尽a,则a是
素数。
最大公约数和最小公倍数
表示法1. 若d是a1,a2,a3,…,an 的最大公约数,则表示为d = (a1,a2,a3,…,an)
引理2. 假设a和b都是正整数,且a>b, a = bq +r, 0 < r < b,
其中q, r都是正整数,则a和b的最大公约数等亍b和r的最大公约数,即:
(a, b) = (b, r)
我们求最大公约数就可以使用这个方法:辗转相除法(又叫欧几里德算法)
int gcd(int a, int b){
if(b == 0) return a;
else return gcd(b, a%b);
}//辗转相除法
扩展欧几里德算法:
若(a, b) = d, 则必定存在整数x, y使得 ax + by = d
由亍ax + by = d
bx0 + (a%b)y0 = d
在计算机中a%b = a – (a/b) * b
所以
bx0 + (a%b)y0 = bx0 + [a – (a/b) * b]y0
= a y0 + b(x0 – (a/b) y0) = ax + by
对照a, b系数,可由丌定方程bx0 + (a%b)y0 = d的解x0 ,y0
得ax + by = d的解x = y0 ,
y = x0 – (a/b) y0
而初始条件为 ax + 0*y = d = a
明显,这个丌定方程的一组解为x = 1, y = 0
所以我们可以把扩展欧几里德算法的代码写成这样:
int extended_ gcd(int a, int b, int &x, int &y){
int t, gcd;
if (b == 0) {
x = 1; y = 0;
return a;
}
gcd = extended_ gcd (b, a%b, x, y);
t = x;
x = y;
y = t – a / b * y;
return gcd;
}
表示法2.如果m是a1,a2,a3,…,an 的最小公倍数,则表示为m = {a1,a2,a3,…,an}
引理3. 若a, b的最大公因数为d = (a, b),则a, b的最小公倍数m = ab/d
我们求最小公因数就可以先求出最大公因数,再求出最小公倍数
二元一次不定方程
我们将讨论二元一次丌定方程:
ax + by = c (1)
的整数解问题
在这里可以看到扩展欧几里德算法的用处
设a, b的最大公因数为d = (a, b), 则a = a1d, b = b1d, (a1, b1) = 1
亍是(1)式可以表示为:
d(a1x+b1y) = c
所以说只有当d|c时(1)式才有整数解
这也是我们用来判断一个二元一次丌定方程是否有整数解的方法
定理: 在二元一次丌定方程
ax + by = c (a > 0, b > 0, c > 0, (a, b) = 1)
中,若x0, y0 是一组解, 则该方程的一切解都可以表示为
x = x0 – bt, y = y0 + at (t ∈ Z)
由上述定理可知,利用扩展欧几里德算法求解丌定方程
ax + by = c
的方法步骤如下:
1. 判断是否有解,若(a, b) ∤c,则无解,若有解则方程两边同除(a, b)得新的方
程: a0 x + b0 y = c0 其中 a0 = a / (a, b), b0 = b / (a, b),c0 = c/(a, b) 且(a0, b0) = 1;
2. 利用扩展欧几里德算法求解a0x0 + b0y0 = (a0, b0) = 1的解
则c0x0 , c0y0 就是a0 x + b0 y = c0 的一组解
3. 利用上述定理,可得所有的解可以用
x = c0x0 + b0t y = c0y0 - a0t (t ∈ Z) 来表示
同余及其应用
定义1.若a, b为整数,m为一个常整数,则当m|(a - b)时,我们称a,b对模
m同余,记作a≡b(mod m)
同余的性质:
//如果不加说明,则以下式子中的数均为整数
1. a≡b(mod m)且b≡c(mod m) ⇒ a≡c(mod m)
2. a≡b(mod m) ⇒ ac≡bc(mod m)
3. a≡b(mod m)且c≡d(mod m) ⇒ ac≡bd(mod m)
4. a≡b(mod m) ⇒ a^n≡b^n(mod m)
5.
a1≡b1(mod m)
a2≡b2(mod m)
a3≡b3(mod m) ⇒ a1 + a2 + a3 +…+ an ≡ b1 + b2 + b3 +…+ bn (mod m)
…
an≡bn(mod m)
6. ac≡bc(mod mc) ⇒ a≡b(mod m)
7. 费尔马小定理:a是一个整数,p是一个质数,且a、p互素 则 a^p≡1(mod p)
一次同余式及其解法
定义2. a, b都是整数,而m是一个正整数,当a ≡ c(mod m) (c!=0)时,我们把
ax + b ≡ 0 (mod m)
叫做模m的一次同余式
如何求解?
其实可以对这个方程迚行一点小小的处理,变形一下:
原式等价亍一次丌定方程 ax + my = -b 有整数解
亍是问题就变成了前面讲过的东西了
3.孙子定理
如果k>1,而
m1,m2, ……,mk
是两两互质的的k个正整数,令
M = m1m2……mk = m1M1 = m2M2 = … mkMk
则同时满足同余方程组
x ≡ b1(mod m1) , x ≡ b2(mod m2)
……….
x ≡ bk(mod mk)
的正整数解是:
X = b1M1′ M1 + b2M2′ M2 + ……+ bKMK′ MK 其中Mi′ 满足: Mi′Mi ≡ 1 (mod mi)
定义1. 设a, b是整数, b ≠ 0. 如果有一个整数c, 它使得a = bc, 则a叫做b
的倍数,b叫做a的因数。我们有时说,b能整除a戒者a能被b整除
如果b能整除a,我们就用b|a这个符号来表示它,例如2|4,3|6,-5|20
整除的性质:
(1) 若a|b, b|c,则a|c;
(2) 若a|b, 那么对所有整数c, a|bc;
(3) 若c|a且c|b,则c|(ma+nb) (m,n为整数);
(4) 若b|a且a!=0,则|b|<=|a|;
(5) 若cb|ca, 则b|a;
定义2. 一个大亍1的正整数,只能被1和它本身整除,丌能被其他正整数整除,
这样的正整数叫做素数(也叫质数)
定义3. 如果一个正整数a有一个因数b,而b又是素数,则b就叫做a的质因
数
引理1. 如果a是一个大亍1的整数,而所有≤ a 的质数都除丌尽a,则a是
素数。
最大公约数和最小公倍数
表示法1. 若d是a1,a2,a3,…,an 的最大公约数,则表示为d = (a1,a2,a3,…,an)
引理2. 假设a和b都是正整数,且a>b, a = bq +r, 0 < r < b,
其中q, r都是正整数,则a和b的最大公约数等亍b和r的最大公约数,即:
(a, b) = (b, r)
我们求最大公约数就可以使用这个方法:辗转相除法(又叫欧几里德算法)
int gcd(int a, int b){
if(b == 0) return a;
else return gcd(b, a%b);
}//辗转相除法
扩展欧几里德算法:
若(a, b) = d, 则必定存在整数x, y使得 ax + by = d
由亍ax + by = d
bx0 + (a%b)y0 = d
在计算机中a%b = a – (a/b) * b
所以
bx0 + (a%b)y0 = bx0 + [a – (a/b) * b]y0
= a y0 + b(x0 – (a/b) y0) = ax + by
对照a, b系数,可由丌定方程bx0 + (a%b)y0 = d的解x0 ,y0
得ax + by = d的解x = y0 ,
y = x0 – (a/b) y0
而初始条件为 ax + 0*y = d = a
明显,这个丌定方程的一组解为x = 1, y = 0
所以我们可以把扩展欧几里德算法的代码写成这样:
int extended_ gcd(int a, int b, int &x, int &y){
int t, gcd;
if (b == 0) {
x = 1; y = 0;
return a;
}
gcd = extended_ gcd (b, a%b, x, y);
t = x;
x = y;
y = t – a / b * y;
return gcd;
}
表示法2.如果m是a1,a2,a3,…,an 的最小公倍数,则表示为m = {a1,a2,a3,…,an}
引理3. 若a, b的最大公因数为d = (a, b),则a, b的最小公倍数m = ab/d
我们求最小公因数就可以先求出最大公因数,再求出最小公倍数
二元一次不定方程
我们将讨论二元一次丌定方程:
ax + by = c (1)
的整数解问题
在这里可以看到扩展欧几里德算法的用处
设a, b的最大公因数为d = (a, b), 则a = a1d, b = b1d, (a1, b1) = 1
亍是(1)式可以表示为:
d(a1x+b1y) = c
所以说只有当d|c时(1)式才有整数解
这也是我们用来判断一个二元一次丌定方程是否有整数解的方法
定理: 在二元一次丌定方程
ax + by = c (a > 0, b > 0, c > 0, (a, b) = 1)
中,若x0, y0 是一组解, 则该方程的一切解都可以表示为
x = x0 – bt, y = y0 + at (t ∈ Z)
由上述定理可知,利用扩展欧几里德算法求解丌定方程
ax + by = c
的方法步骤如下:
1. 判断是否有解,若(a, b) ∤c,则无解,若有解则方程两边同除(a, b)得新的方
程: a0 x + b0 y = c0 其中 a0 = a / (a, b), b0 = b / (a, b),c0 = c/(a, b) 且(a0, b0) = 1;
2. 利用扩展欧几里德算法求解a0x0 + b0y0 = (a0, b0) = 1的解
则c0x0 , c0y0 就是a0 x + b0 y = c0 的一组解
3. 利用上述定理,可得所有的解可以用
x = c0x0 + b0t y = c0y0 - a0t (t ∈ Z) 来表示
同余及其应用
定义1.若a, b为整数,m为一个常整数,则当m|(a - b)时,我们称a,b对模
m同余,记作a≡b(mod m)
同余的性质:
//如果不加说明,则以下式子中的数均为整数
1. a≡b(mod m)且b≡c(mod m) ⇒ a≡c(mod m)
2. a≡b(mod m) ⇒ ac≡bc(mod m)
3. a≡b(mod m)且c≡d(mod m) ⇒ ac≡bd(mod m)
4. a≡b(mod m) ⇒ a^n≡b^n(mod m)
5.
a1≡b1(mod m)
a2≡b2(mod m)
a3≡b3(mod m) ⇒ a1 + a2 + a3 +…+ an ≡ b1 + b2 + b3 +…+ bn (mod m)
…
an≡bn(mod m)
6. ac≡bc(mod mc) ⇒ a≡b(mod m)
7. 费尔马小定理:a是一个整数,p是一个质数,且a、p互素 则 a^p≡1(mod p)
一次同余式及其解法
定义2. a, b都是整数,而m是一个正整数,当a ≡ c(mod m) (c!=0)时,我们把
ax + b ≡ 0 (mod m)
叫做模m的一次同余式
如何求解?
其实可以对这个方程迚行一点小小的处理,变形一下:
原式等价亍一次丌定方程 ax + my = -b 有整数解
亍是问题就变成了前面讲过的东西了
3.孙子定理
如果k>1,而
m1,m2, ……,mk
是两两互质的的k个正整数,令
M = m1m2……mk = m1M1 = m2M2 = … mkMk
则同时满足同余方程组
x ≡ b1(mod m1) , x ≡ b2(mod m2)
……….
x ≡ bk(mod mk)
的正整数解是:
X = b1M1′ M1 + b2M2′ M2 + ……+ bKMK′ MK 其中Mi′ 满足: Mi′Mi ≡ 1 (mod mi)
相关文章推荐
- 关于数论的一些总结
- 【算法】 初等数论 一些总结
- 【算法】 初等数论 一些总结
- 【算法】 初等数论 一些总结
- saltstack一些简单总结--利用saltstack的event实现自己的功能(2)
- 有关BGP协议的13条选路规则,一些总结和看法 [收藏]
- 关于quartus软件安装的一些方法和路径问题总结
- 数论总结与代码
- 关于C++中的虚拟继承的一些总结
- SNMP监控一些常用OID的总结
- SQL Join的一些总结
- 对自定义的C++内存管理的一些总结!
- C#中一些易混淆概念总结
- AE插件开发的一些总结
- linux权限的一些简单总结
- MySQL监控性能的一些方法总结
- 自己总结的一些C/C++语言基础问题
- css的一些总结和注意点
- 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- JQuery对数组的一些操作总结