<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

    主站蜘蛛池模板: 国产国产人免费视频成69堂| 无码人妻久久一区二区三区免费 | 久久99精品免费一区二区| 夜夜爽妓女8888视频免费观看| 一级看片免费视频囗交| 50岁老女人的毛片免费观看| 国产精品另类激情久久久免费| 亚洲国产精品13p| 亚洲福利视频网站| 国产综合成人亚洲区| 久久久久久久久久国产精品免费| 精品久久香蕉国产线看观看亚洲| 亚洲免费人成视频观看| 污视频网站免费在线观看| 最近免费中文字幕高清大全 | 波多野结衣在线免费观看| 亚洲国产成人精品久久| 四虎永久在线精品免费网址 | 91麻豆国产自产在线观看亚洲| 亚洲精品美女久久久久| 免费看h片的网站| 亚洲av色影在线| 美女免费视频一区二区| 免费鲁丝片一级观看| 久久综合亚洲鲁鲁五月天| 久久国产乱子伦精品免费午夜| 亚洲日本va中文字幕久久| 亚洲成a人无码亚洲成www牛牛| 野花香在线视频免费观看大全| 免费久久精品国产片香蕉| 亚洲欧美不卡高清在线| 在线看片韩国免费人成视频| 亚洲av永久无码| 国产精品久久香蕉免费播放| 2022免费国产精品福利在线| 免费成人午夜视频| 亚洲免费人成在线视频观看| 国产成人精品亚洲2020| 久久久久久曰本AV免费免费| 国产精品亚洲专区一区| 亚洲精品网站在线观看你懂的|