<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大大毛 的筆記

      DDM's Note

    哪怕沒有辦法一定有說法,
    就算沒有鴿子一定有烏鴉,
    固執無罪 夢想有價,
    讓他們驚訝.

    posts - 14, comments - 23, trackbacks - 0, articles - 58
       :: 首頁 ::  :: 聯系 ::  :: 管理

    求最大公約數及最小公倍數

    Posted on 2007-04-02 22:55 大大毛 閱讀(408) 評論(0)  編輯  收藏 所屬分類: 常用算法


    ??????最近用到最小公倍數、最大公約數是因為需要對用戶 Key In 的數據(分數形式)進行檢驗,檢驗的規則是同組的數據之和 =? 1,這樣就需要求分母的最小公倍數。

    ??????在網上搜索了一下,主要介紹的算法有兩種:

    ??????1. 歐幾里德算法
    ?????????又叫輾轉相除法,是最常用的算法,以前學到的就是這個了。它僅在對大素數的模運算時會遇到麻煩。

    ' Euclid算法(VB)
    Public ? Function ?fEuclid(lngNum1? As ? Long ,?lngNum2? As ? Long )? As ? Long
    ????
    Dim ?lngA? As ? Long ,lngB? As ? Long ,lngC? As ? Long
    ????
    If ?lngNum1? = ? 0 ? Or ?lngNum2? = ? 0 ? Then
    ????????
    If ?lngNum1? = ? 0 ? Then
    ????????????fEuclid?
    = ?lngNum2
    ????????
    Else
    ????????????fEuclid?
    = ?lngNum1
    ????????
    End ? If
    ????????
    Exit ? Function
    ????
    End ? If
    ????
    If ?lngNum1? >= ?lngNum2? Then
    ????????lngA?
    = ?lngNum1:lngB? = ?lngNum2
    ????
    Else
    ????????lngA?
    = ?lngNum2:lngB? = ?lngNum1
    ????
    End ? If
    ????lngC?
    = ?lngA? Mod ?lngB
    ????
    Do ? While ?lngC? > ? 0
    ????????lngA?
    = ?lngB:lngB? = ?lngC
    ????????lngC?
    = ?lngA? Mod ?lngB
    ????
    Loop
    ????
    ????fEuclid?
    = ?lngB

    End?Function

    ??????2. Stein算法
    ?????????a.??? 如果A=0,B是最大公約數;如果B=0,A是最大公約數
    ?????????b.?? An = A,Bn = B,Cn = 1 (當n=1時)
    ?????????c1. 如果An和Bn都是偶數,則An+1 = An /2,Bn+1 = Bn /2,Cn+1 = Cn *2
    ?????????c2. 如果An是偶數,Bn不是偶數,則An+1 = An /2,Bn+1 = Bn ,Cn+1 = Cn
    ?????????c3. 如果Bn是偶數,An不是偶數,則Bn+1 = Bn /2,An+1 = An ,Cn+1 = Cn
    ?????????c4.?如果An和Bn都不是偶數,則An+1 = |An - Bn|,Bn+1 =min(An,Bn),Cn+1 = Cn
    ?????????d.??? n++
    ?????????Stein算法最大的好處就是它只使用到了減法以及移位操作(與2運算),能夠避免歐幾里德算法運用到大數上所面臨的問題。

    ' Stein算法(VB)
    Public ? Function ?fStein(lngNum1? As ? Long ,?lngNum2? As ? Long )? As ? Long
    ????
    Dim ?lngResult? As ? Long ,?lngA? As ? Long ,?lngB? As ? Long ,?lngC? As ? Long
    ????lngA?
    = ?lngNum1:?lngB? = ?lngNum2:?lngC? = ? 1
    ????
    ????
    Do ? While ?lngA? <> ? 0 ? And ?lngB? <> ? 0
    ????????
    If ?lngA? Mod ? 2 ? = ? 0 ? And ?lngB? Mod ? 2 ? = ? 0 ? Then
    ????????????lngA?
    = ?lngA? / ? 2 :?lngB? = ?lngB? / ? 2 :?lngC? = ?lngC? * ? 2
    ????????
    Else
    ????????????
    If ?lngA? Mod ? 2 ? <> ? 0 ? And ?lngB? Mod ? 2 ? <> ? 0 ? Then
    ????????????????
    If ?lngA? > ?lngB? Then
    ????????????????????
    ' lngB?=?lngB
    ????????????????????lngA? = ?lngA? - ?lngB
    ????????????????
    Else
    ????????????????????lngB?
    = ?lngA
    ????????????????????lngA?
    = ?lngB? - ?lngA
    ????????????????
    End ? If
    ????????????
    Else
    ????????????????
    If ?lngA? Mod ? 2 ? = ? 0 ? Then
    ????????????????????lngA?
    = ?lngA? / ? 2
    ????????????????
    Else
    ????????????????????lngB?
    = ?lngB? / ? 2
    ????????????????
    End ? If
    ????????????
    End ? If
    ????????
    End ? If
    ????
    Loop
    ????
    If ?lngA? = ? 0 ? Then
    ????????lngResult?
    = ?lngC? * ?lngB
    ????
    Else
    ????????lngResult?
    = ?lngC? * ?lngA
    ????
    End ? If
    ????
    ????fStein?
    = ?lngResult

    End?Function

    ??????最小公倍數 = M * N / 最大公約數


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    i am ddm

    主站蜘蛛池模板: 中文字幕免费人成乱码中国| 亚洲高清毛片一区二区| 国产传媒在线观看视频免费观看| 亚洲最大的成网4438| 成全动漫视频在线观看免费高清版下载 | 亚洲国产一区国产亚洲| 成人无码WWW免费视频| 亚洲av永久无码精品国产精品| 中文字幕无线码中文字幕免费| 爱情岛论坛免费视频| 亚洲国产成a人v在线| 国产成人AV免费观看| 亚洲日韩中文字幕天堂不卡| 亚洲精品视频在线观看免费| 亚洲va精品中文字幕| 亚洲成在人线aⅴ免费毛片| 亚洲精品123区在线观看| 日本特黄特色aa大片免费| 亚洲日韩在线中文字幕综合 | 久久青青草原亚洲av无码| 国产精品99爱免费视频| 亚洲AV永久精品爱情岛论坛| 在线看片免费人成视久网| 亚洲国产中文在线视频| 日韩精品成人亚洲专区| 男女一边桶一边摸一边脱视频免费| 国产亚洲高清不卡在线观看| 精品无码无人网站免费视频 | 久久一区二区免费播放| 无码专区—VA亚洲V天堂| 国产免费一区二区三区| 国产成人99久久亚洲综合精品| 中文无码日韩欧免费视频| 亚洲国产精品成人精品小说| 成人免费无码精品国产电影| a一级毛片免费高清在线| 亚洲国产精品无码久久久| 亚洲中文字幕在线第六区| 男人j进女人p免费视频| 暖暖免费高清日本一区二区三区 | 久久精品乱子伦免费|