持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
带余除法及其基本性质
昨天我们已经介绍了最大公约数与最小公倍数的基本定义和性质,下面我们来学习带余除法。带余除法是初等数论证明中最重要、最基本、最直接的工具。
带余除法
带余除法 设 a,b 是两个给定的整数,a=0,那么,一定存在唯一的一对整数 q 与 r,使得 b=qa+r,0≤r<∣a∣。另外,a∣b⇔r=0。
证明如下:
(1)唯一性
假设还有整数 q1 和 r1 满足
b=q1a+r1,0≤r1<∣a∣
若 r≤r1,则
0≤r1−r<∣a∣r1−r=(b−q1a)−(b−qa)=(q−q1)a
如果 r<r1,即 r1−r>0,
由 r1−r=(q−q1)a 得
r1−r=xa(x∈N+)
即
r1−r>∣a∣
与 0≤r1<∣a∣ 不符
若 r>r1,同理可得
r−r1>∣a∣
与 0≤r1<∣a∣ 不符
综上所述,必有 r1=r,进而有 q1=q,即满足条件的整数 q 与 r 唯一
(2)存在性
当 a∣b 时,q=b/a,r=0
当 a∤b 时,
构造集合 T={b−ka∣k∈Z},易知 T 中存在最小的正整数,记作 t0=b−k0>0
因为 a∤b,所以 t0=∣a∣
若 t0>∣a∣,显然 t1=t0−∣a∣>0,t1∈T,与 t0 是 T 中的最小正整数矛盾
所以 t0<∣a∣,取 q=k0,r=t0 即可满足要求
综上所述,满足条件的整数 q 与 r 一定存在
推广 设a,b,d 是给定的整数,a=0,则一定存在唯一的一对整数 q1 和 r1,满足b=q1a+r1,d≤r1<∣a∣+d。
一些性质
- 设 a>0 ,任意整数被 a 除后所得的最小非负余数是且仅是 0,1,...,a−1 中的一个。
- 相邻的 a 个整数被 a 除后,恰好取到这 a 个余数。
- 设 a≥2,则任一正整数 n 必定可以唯一表示为
n=rkak+rk−1ak−1+...+r1a+r0
- 设 a 为正奇数且 a=1,一定存在正整数 d≤a−1,使得 a∣2d−1
证明如下:
易知 a∤2j(0≤j<a)
所以 2j=qja+rj,0<rj<a
所以 r0,r1,...,ra−1 可能的取值仅有 a−1 个,
即一定存在 rx=ry,0≤x<y≤a−1
可得 a(qy−qx)=2y−2x=2x(2y−x−1)
因为 a∣a(qy−qx),(a,2x)=1
所以 a∣2y−x−1
即存在正整数 d≤a−1,使得 a∣2d−1
- 设 a 为正奇数且 a=1,一定存在正整数 d≤a−1,使得 a∣2d−1
- 必有正整数 d 使得 (2d−3,a)=1
辗转相除法
辗转相除法 设 u0,u1 是两个整数,u1=0,u1∤u0,则
u0=q0u1+u2,0<u2<∣u1∣u1=q1u2+u3,0<u3<u2u2=q2u3+u4,0<u4<u3...uk−2=qk−2uk−1+uk,0<uk<uk−1uk−1=qk−1uk+uk+1,0<uk+1<ukuk=qkuk+1
该算法称为辗转相除法。
在上述条件下,
- uk+1=(u0,u1)
- d∣u0∧d∣u1⇔d∣uk+1
- 存在整数 x0,x1,使得 uk+1=x0u0+x1u1
即两个整数的最大公约数一定可以表示为这两个整数的整系数线性组合。
用辗转相除法求两个数的最大公约数的C语言代码实现如下。
#include <stdio.h>
int gcd(int a,int b)
{
if (b==0) return a;
return gcd(b,a%b);
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",gcd(a,b));
return 0;
}
算数基本定理
算数基本定理 设 a>1,那么必有a=p1×p2×...×ps,其中 pj(1≤j≤s) 是素数,且不计顺序的情况下,该表示唯一。