<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 大大毛 閱讀(415) 評論(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

    主站蜘蛛池模板: A毛片毛片看免费| 一级做受视频免费是看美女| 一个人免费日韩不卡视频| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 色哟哟国产精品免费观看| 在线观看人成视频免费| 中文字幕乱码亚洲精品一区| 韩国免费一级成人毛片| 亚洲人成网站在线观看播放动漫 | 亚洲国产福利精品一区二区| 日本一卡精品视频免费| 亚洲网站在线免费观看| 99久热只有精品视频免费看| 亚洲特级aaaaaa毛片| 97在线观免费视频观看| 亚洲AV色欲色欲WWW| 四虎永久免费网站免费观看| 免费无码午夜福利片69| 丁香五月亚洲综合深深爱| 精品免费视在线观看| 亚洲精品无码久久毛片波多野吉衣| ww在线观视频免费观看| 中文字幕无码亚洲欧洲日韩| 免费永久看黄在线观看app| 国产99久久久久久免费看| 亚洲Av无码专区国产乱码DVD | 亚洲熟妇成人精品一区| 国产一区在线观看免费| 一个人看的免费高清视频日本| 亚洲精品乱码久久久久久蜜桃不卡| 久久久久久成人毛片免费看| 亚洲熟妇无码av另类vr影视| 免费一级毛片在播放视频| a毛片在线看片免费| 亚洲国产成人精品无码一区二区| 妞干网在线免费视频| 国产成人高清精品免费观看| 亚洲美女免费视频| 国产大片线上免费看| 国产午夜无码精品免费看动漫| 亚洲中文字幕无码一去台湾|