1、简述因子的概念
假设存在两个整数 m、n,若 n 除以 m 的结果是整数,即没有余数,则表示 m 是 n 的因子,记作 m | n。
2、欧几里得辗转相除法的证明
证:假设存在 a > b > 0,且 a , b∈Z,有 a = q ⋅ b + r \bm{\ a=q\cdot b+r} a=q⋅b+r,即 q = [ a / b ] \bm{\ q = [ a/b ]} q=[a/b], 0 ≤ r < b \bm{0≤r<b} 0≤r<b
令 g c d ( x , y ) \bm{\ gcd(x , y)} gcd(x,y) 表示 x 和 y 的最大公约数
① 当 r = 0 时, a = q ⋅ b \bm{a=q\cdot b} a=q⋅b,即 g c d ( a , b ) = b \bm{\ gcd(a , b)=b} gcd(a,b)=b
② 当 r ≠ 0 时,假设存在一个数 d 使得 d|b 且 d|b,即有:
d
∣
a
∧
d
∣
b
⟶
d
∣
b
∧
d
∣
(
a
−
q
⋅
b
)
⟶
d
∣
b
∧
d
∣
r
\bm{d|a \land d|b \longrightarrow d|b \land d|(a-q\cdot b) \longrightarrow d|b\land d|r}
d∣a∧d∣b⟶d∣b∧d∣(a−q⋅b)⟶d∣b∧d∣r
d
∣
b
∧
d
∣
r
⟶
d
∣
(
q
⋅
b
+
r
)
∧
d
∣
b
⟶
d
∣
a
∧
d
∣
b
\bm{d|b \land d|r \longrightarrow d|(q\cdot b+r) \land d|b \longrightarrow d|a\land d|b}
d∣b∧d∣r⟶d∣(q⋅b+r)∧d∣b⟶d∣a∧d∣b
于是得到:
d
∣
a
∧
d
∣
b
⟷
d
∣
b
∧
d
∣
r
\bm{d|a\land d|b \longleftrightarrow d|b\land d|r}
d∣a∧d∣b⟷d∣b∧d∣r
令
d
1
=
{
d
∣
d
∣
a
∧
d
∣
b
}
、
d
2
=
{
d
∣
d
∣
b
∧
d
∣
r
}
\ \bm{d_1=\{\ d\ \bigg| \ d|a\land d|b \ \}}、 \bm{d_2=\{\ d\ \bigg| \ d|b\land d|r \ \}}
d1={ d ∣∣∣∣ d∣a∧d∣b }、d2={ d ∣∣∣∣ d∣b∧d∣r }
即
d
∣
a
∧
d
∣
b
⟷
d
∣
b
∧
d
∣
r
⟹
d
1
=
d
2
⟹
d
1
m
a
x
=
d
2
m
a
x
\ \bm{d|a\land d|b \longleftrightarrow d|b\land d|r \ \Longrightarrow\ d_1=d_2\ \Longrightarrow\ d_{1max}=d_{2max}}
d∣a∧d∣b⟷d∣b∧d∣r ⟹ d1=d2 ⟹ d1max=d2max
其中 d 1 、 d 2 \ \bm{d_1、d_2\ } d1、d2 是集合, d 1 m a x 、 d 2 m a x \ \bm{d_{1max}、d_{2max}\ } d1max、d2max 是具体的值
∴
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
r
)
=
g
c
d
(
b
,
a
m
o
d
b
)
\bm{\therefore \ gcd(a,b)\ =\ gcd(b,r)\ =\ gcd(b\ ,\ a\ mod \ b)}
∴ gcd(a,b) = gcd(b,r) = gcd(b , a mod b)
3、最小公倍数和最大公约数的关系
两个数的乘积等于其最大公约数和最小公倍数的乘积
证:假设存在 a > b > 0 ,且 a , b∈Z
令 g c d ( x , y ) \bm{\ gcd(x , y)\ } gcd(x,y) 表示 x 和 y 的最大公约数, l c m ( x , y ) \bm{lcm(x, y)} lcm(x,y) 表示 x 和 y 的最小公倍数
又假设 t = g c d ( a , b ) \bm{t=gcd(a,b)} t=gcd(a,b),所以 a 0 = a / t \bm{a_0=a/t} a0=a/t 和 b 0 = b / t \ \bm{b_0=b/t\ } b0=b/t 互质
∴ g c d ( a 0 , b 0 ) = 1 \bm{\therefore\ gcd(a_0,b_0)=1} ∴ gcd(a0,b0)=1, l c m ( a 0 , b 0 ) = a 0 ⋅ b 0 \bm{\ lcm(a_0,b_0)=a_0\cdot b_0} lcm(a0,b0)=a0⋅b0
∵ l c m ( a , b ) = l c m ( a 0 ⋅ t , b 0 ⋅ t ) = t ⋅ l c m ( a 0 , b 0 ) = t ⋅ a 0 ⋅ b 0 \bm{\because\ lcm(a,b)=lcm(a_0\cdot t,b_0\cdot t)=t\cdot lcm(a_0,b_0)=t\cdot a_0 \cdot b_0} ∵ lcm(a,b)=lcm(a0⋅t,b0⋅t)=t⋅lcm(a0,b0)=t⋅a0⋅b0
∴ g c d ( a , b ) ⋅ l c m ( a , b ) = t 2 ⋅ a ⋅ b = ( t ⋅ a ) ( t ⋅ b ) = a 0 ⋅ b 0 \bm{\therefore \ gcd(a,b)\cdot lcm(a,b)=t^2\cdot a\cdot b=(t\cdot a)(t\cdot b)=a_0\cdot b_0} ∴ gcd(a,b)⋅lcm(a,b)=t2⋅a⋅b=(t⋅a)(t⋅b)=a0⋅b0
故两个数的乘积等于其最大公约数和最小公倍数的乘积得证
4、贝祖定理
关于 x , y(x,y 都是整数)的不定方程,一定存在一组解 (x , y) 使得 a x + b y = g c d ( a , b ) \bm{ax+by=gcd(a,b)} ax+by=gcd(a,b) 成立,其中 a , b 都是整数, g c d ( a , b ) \bm{gcd(a,b)\ } gcd(a,b) 表示 a 和 b 的最大公约数。
证:假设存在 a > b > 0 ,且 a , b∈Z,令 d = g c d ( a , b ) \bm{\ d=gcd(a , b)\ } d=gcd(a,b)
∵ a = b ⋅ q + r ( 0 ≤ r < b ) \bm{\because \ a=b\cdot q+r \ \ (0\leq r<b )} ∵ a=b⋅q+r (0≤r<b),且 g c d ( a , b ) = g c d ( b , r ) \bm{\ gcd(a,b)=gcd(b,r)} gcd(a,b)=gcd(b,r)
∴ b = r ⋅ q 1 + r 1 ( 0 ≤ r 1 < r ) \bm{\therefore\ b=r\cdot q_1+r_1 \ \ (0\leq r_1<r )} ∴ b=r⋅q1+r1 (0≤r1<r)
又 ∵ g c d ( b , r ) = g c d ( r , r 1 ) \bm{\because\ gcd(b,r)=gcd(r,r_1)} ∵ gcd(b,r)=gcd(r,r1)
∴ r = r 1 ⋅ q 2 + r 2 ( 0 ≤ r 2 < r 1 ) \bm{\therefore\ r=r_1\cdot q_2+r_2 \ \ (0\leq r_2<r_1 )} ∴ r=r1⋅q2+r2 (0≤r2<r1)
以此类推: … … \bm{\dots \dots } ……
r n − 3 = r n − 2 ⋅ q n − 1 + r n − 1 ( 0 ≤ r n − 1 < r n − 2 ) \bm{\ r_{n-3}=r_{n-2}\cdot q_{n-1}+r_{n-1} \ \ (0\leq r_{n-1}<r_{n-2} )} rn−3=rn−2⋅qn−1+rn−1 (0≤rn−1<rn−2)
r n − 2 = r n − 1 ⋅ q n + r n ( 0 ≤ r n < r n − 1 ) \bm{\ r_{n-2}=r_{n-1}\cdot q_n+r_n \ \ (0\leq r_n<r_{n-1} )} rn−2=rn−1⋅qn+rn (0≤rn<rn−1)
r n − 1 = r n ⋅ q n + 1 ( r n + 1 = 0 ) \bm{\ r_{n-1}=r_{n}\cdot q_{n+1}\ \ (r_{n+1}=0 )} rn−1=rn⋅qn+1 (rn+1=0) , 即 d = r n \bm{\ d=r_n} d=rn
此时 b > r > r 1 > r 2 > ⋅ ⋅ ⋅ > r n − 1 > r n > r n + 1 = 0 \bm{\ b>r>r_1>r_2>\cdot \cdot \cdot >r_{n-1}>r_n>r_{n+1}=0 \ } b>r>r1>r2>⋅⋅⋅>rn−1>rn>rn+1=0
∴
d
=
r
n
=
r
n
−
2
−
q
n
⋅
r
n
−
1
\bm{\therefore \ d=r_n=r_{n-2}-q_n\cdot r_{n-1}\ }
∴ d=rn=rn−2−qn⋅rn−1
=
r
n
−
2
−
q
n
⋅
(
r
n
−
3
−
q
n
−
1
⋅
r
n
−
2
)
\bm{=r_{n-2}-q_n\cdot (r_{n-3}-q_{n-1}\cdot r_{n-2}) \ }
=rn−2−qn⋅(rn−3−qn−1⋅rn−2)
=
−
q
n
⋅
r
n
−
3
+
(
1
+
q
n
⋅
q
n
−
1
)
⋅
r
n
−
2
\bm{=-q_n\cdot r_{n-3}+(1+q_n\cdot q_{n-1})\cdot r_{n-2} \ }
=−qn⋅rn−3+(1+qn⋅qn−1)⋅rn−2
⋯
⋯
\bm{\cdots \cdots}
⋯⋯
=
x
⋅
a
+
y
⋅
b
\bm{=x\cdot a+y\cdot b \ }
=x⋅a+y⋅b
由于 q , q 1 , q 2 , . . . , q n − 1 , q n \bm{\ q \ ,q_1\ , q_2 \ , ... \ , q_{n-1}\ ,q_n\ } q ,q1 ,q2 ,... ,qn−1 ,qn 都是整数
所以 x 和 y 必是整数
故一定存在一组解 (x , y) 使得
a
x
+
b
y
=
g
c
d
(
a
,
b
)
\bm{ax+by=gcd(a,b)}
ax+by=gcd(a,b) 成立
5、通过扩展欧几里得算法求解贝祖等式
解:令 a 0 x 0 + b 0 y 0 = g c d ( a 0 , b 0 ) − − − ( 1 ) \bm{\ a_0x_0+b_0y_0=gcd(a_0,b_0) \ \ ---(1)} a0x0+b0y0=gcd(a0,b0) −−−(1)
由欧几里得辗转相除公式可得:
g c d ( b 0 , a 0 m o d b 0 ) = g c d ( a 0 , b 0 ) − − − ( 2 ) \bm{gcd(b_0\ ,\ a_0\ mod\ b_0)=gcd(a_0,b_0)\ \ ---(2)} gcd(b0 , a0 mod b0)=gcd(a0,b0) −−−(2)
∵ x m o d y = x − ⌊ x / y ⌋ ⋅ y \bm{\because\ x \ mod \ y = x - \lfloor{x/y} \rfloor \cdot y} ∵ x mod y=x−⌊x/y⌋⋅y ,其中 ⌊ ⌋ \bm{\lfloor \rfloor} ⌊⌋ 为向下取整符号
∴ g c d ( b 0 , a 0 m o d b 0 ) = b 0 x 1 + ( a 0 − ⌊ a 0 / b 0 ⌋ ⋅ b 0 ) ⋅ y 1 − − − ( 3 ) \bm{\therefore \ gcd(b_0\ ,\ a_0\ mod\ b_0)=b_0x_1+(a_0 - \lfloor{a_0/b_0} \rfloor \cdot b_0)\cdot y_1 \ \ ---(3)} ∴ gcd(b0 , a0 mod b0)=b0x1+(a0−⌊a0/b0⌋⋅b0)⋅y1 −−−(3)
将 (1) (3) 式代入 (2) 可得:
a 0 x 0 + b 0 y 0 = b 0 x 1 + ( a 0 − ⌊ a 0 / b 0 ⌋ ⋅ b 0 ) ⋅ y 1 − − − ( 4 ) \bm{ a_0x_0+b_0y_0=b_0x_1+(a_0 - \lfloor{a_0/b_0} \rfloor \cdot b_0)\cdot y_1 \ \ ---(4)} a0x0+b0y0=b0x1+(a0−⌊a0/b0⌋⋅b0)⋅y1 −−−(4)
整理 (4) 得: a 0 x 0 + b 0 y 0 = a 0 y 1 + b 0 ( x 1 − ⌊ a 0 / b 0 ⌋ ⋅ y 1 ) − − − ( 5 ) \bm{ a_0x_0+b_0y_0=a_0y_1+b_0\ (x_1 - \lfloor{a_0/b_0} \rfloor \cdot y_1) \ \ ---(5)} a0x0+b0y0=a0y1+b0 (x1−⌊a0/b0⌋⋅y1) −−−(5)
∴
(
x
0
,
y
0
)
=
(
y
1
,
x
1
−
⌊
a
0
/
b
0
⌋
⋅
y
1
)
\bm{\therefore \ (x_0,y_0)=(y_1,x_1 - \lfloor{a_0/b_0} \rfloor \cdot y_1)}
∴ (x0,y0)=(y1,x1−⌊a0/b0⌋⋅y1)
为了进一步求得 x1 和 y1 的值,可以按上述步骤求解
故 ( x 1 , y 1 ) = ( y 2 , x 2 − ⌊ a 1 / b 1 ⌋ ⋅ y 2 ) \bm{\ (x_1,y_1)=(y_2,x_2 - \lfloor{a_1/b_1} \rfloor \cdot y_2)} (x1,y1)=(y2,x2−⌊a1/b1⌋⋅y2)
其中 g c d ( a 1 , b 1 ) = g c d ( b 0 , a 0 m o d b 0 ) \bm{ \ gcd(a_1,b_1)=gcd(b_0\ , \ a_0\ mod\ b_0)} gcd(a1,b1)=gcd(b0 , a0 mod b0),即 a 1 = b 0 , b 1 = a 0 m o d b 0 \bm{\ a_1=b_0\ , \ b_1=a_0 \ mod\ b_0 \ } a1=b0 , b1=a0 mod b0
⋯ ⋯ \bm{\cdots \cdots} ⋯⋯
以此类推,直到递归至第 n 次使 b n = 0 , a n = g c d ( a n , b n ) \bm{\ b_n=0\ , \ a_n=gcd(a_n,b_n)} bn=0 , an=gcd(an,bn),即 ( x n , y n ) = ( 1 , 0 ) \bm{\ (x_n,y_n)=(1,0)\ } (xn,yn)=(1,0)
然后将该组解逐一回代能够求得: ( x n − 1 , y n − 1 ) , ( x n − 2 , y n − 2 ) , … , ( x 0 , y 0 ) \bm{(x_{n-1},y_{n-1}),(x_{n-2},y_{n-2}),\ldots,(x_0,y_0)} (xn−1,yn−1),(xn−2,yn−2),…,(x0,y0)
由于原方程为不定方程 ,于是求得的 ( x 0 , y 0 ) \bm{\ (x_0,y_0)\ } (x0,y0) 只是一组特解
通解为: ( x , y ) = ( x 0 ± k b 0 , y 0 ∓ k a 0 ) \bm{(x,y)=(x_0\pm kb_0\ ,\ y_0\mp ka_0)} (x,y)=(x0±kb0 , y0∓ka0), k ∈ Z \bm{k\in Z} k∈Z
( a x + b y = c ⟹ a ( x + k b ) + b ( y − k a ) = a x + b y = c ) \bm{(\ ax+by=c \ \Longrightarrow\ a(x+kb)+b(y-ka)=ax+by=c \ )} ( ax+by=c ⟹ a(x+kb)+b(y−ka)=ax+by=c )
C++算法实现
void extend_gcd(int a, int b,int &x, int &y){
if(b==0) x=1,y=0;
else {
extend_gcd(b,a%b,x,y);
int temp = y;
y = x- a/b*y;
x = temp;
}
return;
}