a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 112|回复: 1

[考试试题] 计算机等级考试二级VB常用算法(5):约数因子

[复制链接]
发表于 2012-7-31 22:15:04 | 显示全部楼层 |阅读模式
   # 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
这种类型题目的扩展是约数和因子题型。
回复

使用道具 举报

 楼主| 发表于 2012-7-31 22:15:05 | 显示全部楼层

计算机等级考试二级VB常用算法(5):约数因子

</p>  2、实战练习
3 F( \" L: }  f
) E5 h  d4 E" g8 E7 @( N& {' F! J6 K4 w- o7 r# E
1)        补充代码(2003春二(9)) 7 b, P! l- Z- w2 k7 s; L# j
         给定一个十进制正整数,找出小于它并与其互质的所有正整数(所谓互质数是指最大公约数为1的两个正整数,下图是程序执行画面)。
7 u1 R9 H) z) k6 ?* Z! G8 q
8 G4 T4 [- W' ~8 J/ ?; Q
/ O( X; ?+ H8 E0 s              Option Explicit
- }3 S' w# h* C' P
0 a, q7 K6 i" D% x& Q. X                  Private Function gcd(     (1)     ) As Integer
% b- Y0 d5 L* V% [, E                    Dim r As Integer
# T- M. ]  I) T. S                         r = m Mod n
/ G4 o' b% h' o                    If r = 0 Then
* r- v$ x3 f; d( J2 ^8 i2 B9 f                          gcd = n
3 _; b, s: B+ F. B  {; i/ _! ?( M                    Else
) a0 a, L+ o1 G) A) W( X7 q                          m = n: n = r * ?2 P/ W" J4 ?. z
                                        (2)     
' b, D' [3 M# v1 P                 End If 2 I  b8 U8 R" N* u& _: J4 I
                  End Function - @) \. F. q' _9 h7 o
& C3 O" d2 a' q7 P  W
                  Private Sub Command1_Click() 0 C: q% v/ L- J, V5 B5 @, @
                    Dim n As Integer, p As Integer * H$ o" m$ ~) T- w. V6 t; B
                    n = Val(Text1) 4 S3 Y) |# w, u$ K
                    For p = n - 1 To 2 Step -1 6 W! ~% K# U4 m
                               If      (3)       Then List1.AddItem p " U# h  M1 d9 \6 x5 ]+ h
                          Next p
4 M' ^7 L' C; O2 V" I* D/ D                  End Sub 9 [% q) T. k$ j! d/ ]9 c1 D
2)        编程题(2002秋上机试卷01)
: x9 e9 \9 v* c9 F( [         生成一个三行八列的二维数组A(3,8),其中前两行元素产生的方法是: % G' M! l7 Y5 T7 H# \: Z1 H6 n
用初值X1=26及公式Xi+1=(25×Xi+357) Mod 1024,产生一个数列:X1、X2、......、X16 。
5 L$ I* E( Y; }3 _) k' F其中X1~X8作为A的第一行元素;X9~X16作为A的第二行元素;A的第三行元素值取前两行同列元素的最大公约数。最后按图示格式显示在图片框中。 1 V3 j: k$ d: E7 T: j5 q0 M
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-20 04:26 , Processed in 0.401812 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表