# y! O: n, I6 m) m& S" I
1、算法说明 + j% c# K) [( W9 |; Q
1) 最大公约数: 2 j$ n# V' M o' M3 D) \- Q
用辗转相除法求两自然数m、n的最大公约数。 5 S* H, F$ t% X% \ @; w
(1) 首先,对于已知两数m、n,比较并使得m>n;
0 {0 x- K3 t" f(2) m除以n得余数r; * q! w; Q$ M/ H8 Q0 n' C P4 u
(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)
/ \1 M L+ d8 U# y4 R(4) mßn nßr 再重复执行(2) 2 t) E1 E" w' r3 T
譬如: 10与5
6 t* l5 E; |1 x$ f: N分析步骤: m=10 n=5 4 |) J) e' x Y* s, Z+ A) c
r=m mod n=0
" M- b: h( f1 i) W+ ? 所以n(n=5)为最大公约数
( _) {4 L. J: D 24与9 ; { X8 P% ^% `
分析步骤: m=24 n=9 & Z$ T( z6 V/ k5 g% I
r=m mod n=6
8 L+ r2 I2 ?% r- p. { r≠0 m=9 n=6 ' r( b0 R1 d! `6 v/ C" J# e
r=m mod n=3 # V; H( d% g# v, C, j/ n* z v u
r≠0 m=6 n=3 . r- g9 O1 y; o9 ?' ?5 A2 F6 I) a
r=m mod n=0 ( Q4 v3 I7 Q2 ] X( y, |
所以n(n=3)为最大公约数
% n, M; d9 G/ F6 s% _" a% W! f4 Q6 z' G# R' Q
算法实现 * }8 P3 e8 i/ b8 C. x2 R% y0 q1 U4 K' l
循环实现
+ e0 S% ]5 m- z' Y( t) Z7 v5 j UPrivate Function GCD(ByVal m As Long, ByVal n As Long) As Long
. Y- @+ m$ a5 T7 s5 ` Dim temp As Long m% q' m. f) `) n8 Z: y
If m < n Then temp = m: m = n: n = temp * o5 Z; p) l6 K4 s
Dim r As Long 3 M( r6 U! y9 Z3 `4 k7 Q
Do
$ X4 U; ^$ |& W: _7 N0 y0 u# Z+ ~ r = m Mod n $ T: Z* q/ V' O7 L9 |+ x& Y
If r = 0 Then Exit Do - P8 m9 d8 K V! e3 O. Z. @8 l7 O5 U' O
m = n 1 G0 D2 I M) B" G8 y. x1 ` i
n = r & y( q& g% @( j7 m3 E) M' j
Loop . ~- I" Q8 C8 p* X* A
GCD = n 5 W; W Q, R0 e6 B
End Function 0 Q( B* }# T4 s% R9 z/ k/ n8 C
; E- L+ Z* a! \& Y递归实现
; D1 \1 ^4 d; _: R Private Function GCD(ByVal m As Long, ByVal n As Long) As Long
4 V7 `5 A. q: Z a Dim temp As Long . Q$ H d; X) r. C
If m < n Then temp = m: m = n: n = temp , |, m6 @- t; ^4 X3 J7 P
Dim r As Long
5 e7 H8 p' e. G r = m Mod n ; b6 A. s! n5 `
If r = 0 Then
9 x0 C: Q6 Z0 W3 c5 L- s2 L GCD = n
. k" b5 M( ~5 E- K5 r: Y+ E Else
& S' J# W+ N9 O1 M c) I g m = n
1 D- w0 I) c! o" J n = r
* T2 u: c$ F/ }% e GCD = GCD(m, n) : o1 O8 h' |4 z$ @9 d! C/ B( i
End If 1 U! T& A3 C* f/ c2 R4 o& f
End Function 5 G. t5 l5 Y' @/ m" `% X& V3 z
, f. i7 ^. t0 y2 D7 t2) 最小公倍数
; Q2 w0 z3 Z# D7 W) l m×n÷最大公约数 " a8 C) _% ` D" \! m$ N
0 a: R- [+ f9 ]3) 互质数
) _4 t) A+ F- {0 u 最大公约数为1的两个正整数
7 G: w2 }1 g/ |. Y( S' j2 {
( J; t1 C, y1 `( O! B6 P/ ]解题技巧
3 h; C+ U1 m- `2 h8 h该算法需要识记! 7 i L- e* A3 C7 D' h1 L( D
这种类型题目的扩展是约数和因子题型。 |