算法说明7 L, `' \( S H8 B' _* p% u
1) 最大公约数:
3 k+ S5 L2 B1 l* Q 用辗转相除法求两自然数m、n的最大公约数。0 P4 |6 _' q" d
(1) 首先,对于已知两数m、n,比较并使得m>n;
/ C2 O- z# M, X8 @! [% T l (2) m除以n得余数r;6 ^+ Q u- [% U9 u
(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)
; ~3 A% V& F; I, d; F. i; r (4) mßn nßr 再重复执行(2). h( c4 a$ E6 c6 k% r. P- o
譬如: 10与5
3 N9 H& s9 r! c: D1 R 分析步骤: m=10 n=5
' n5 \, I) P. j$ V+ L r=m mod n=0% k$ G3 e0 ?6 `" L$ {! r, M! }
所以n(n=5)为最大公约数: k6 ]' A3 }7 T+ P g" S' E
24与9
! m3 W, [) I) c% X+ g- C 分析步骤: 以下是引用片段:+ T* P, l5 }' q
m=24 n=9 + s2 _. \9 R+ Z3 i6 S2 p
r=m mod n=6
2 x' {0 S" Z, |6 N$ Y r≠0 m=9 n=6 " N& X- Y) e% ~
r=m mod n=3 0 n3 X+ |8 i! Y: k' [7 w
r≠0 m=6 n=3
" j6 U: ]1 o/ A- c3 E r=m mod n=0 2 f& w7 o7 P( B
; B. _( w, `7 V, J! h, W 所以n(n=3)为最大公约数8 A! ? v: B; G" Z1 G4 V, G2 \' V
算法实现# F! H* o9 v: [
循环实现
h) m M8 D7 I8 `. j以下是引用片段:% I% N, k8 `: R
PRivate Function GCD(ByVal m As Long, ByVal n As Long) As Long I+ ^; `/ j S! \
Dim temp As Long
: T% j1 F1 @2 s/ N* E# e' Q4 Q If m < n Then temp = m: m = n: n = temp
& r+ g* X6 N2 i: f( @$ ^+ N3 |3 m Dim r As Long
1 O4 A. _" Q$ e- U0 I Do & X1 d4 h' Q( \& O" Z( L
r = m Mod n - p+ G) w+ C9 X
If r = 0 Then Exit Do
$ A- ]" @& G( p% N( @ m = n - Q. d5 b# c+ G( }3 `% w
n = r * m- Z' l4 O3 p; B: ^- c
Loop
: y* K- z3 S0 n$ g" D0 ? B GCD = n
: G% t: X9 y! [) G0 M5 c End Function 8 s. k# Q# h, u1 s# ?
7 h, @ d' @1 s( s- T) V1 L" E 递归实现
# W9 A. J- e4 s* `1 W! i6 b/ `* d以下是引用片段:
5 e1 j" a# G4 c Private Function GCD(ByVal m As Long, ByVal n As Long) As Long ' u3 ^& l( A- J6 e+ o1 [8 ~
Dim temp As Long
2 Q5 L* S% R( o& B! K" S; f If m < n Then temp = m: m = n: n = temp
, F, Z# b8 `& I* C% l7 [ Dim r As Long ' g L, V1 P2 [5 @: e R
r = m Mod n 1 a# U% t+ k% q1 `9 R4 z# j" _
If r = 0 Then 0 W& g. M: ]2 J' ?8 I3 U# V+ y
GCD = n
- z, \' u5 t5 d4 e) D Else
' ?; e9 G9 _, e& j* J! b- v7 W m = n * n/ c, A- \& w) E Q& w% r
n = r 7 u9 {8 V: X } z/ T
GCD = GCD(m, n)
7 k; M2 Y; l- d5 P; y End If
* G; t- c' O3 U- l5 b. t End Function
) |+ R$ _4 n: A5 i9 M3 v
7 ^# w- X1 n) F9 R+ M 2) 最小公倍数
9 \0 S. ^6 b! d9 {* o) } m×n÷最大公约数 ^8 H1 G5 Q! P, Y( ~6 Q$ V
3) 互质数2 m/ {; J7 g! A. b% [ K# A' l" Y
最大公约数为1的两个正整数2 q m* T/ Q% B+ @, _4 t6 J
解题技巧) G0 T! I7 K( g+ P5 h: U
该算法需要识记!
5 n8 d) ^0 S9 Z, L$ @; |, Z& ?! L7 J 这种类型题目的扩展是约数和因子题型。 |