1. 程式人生 > >最大公因子求法

最大公因子求法

篩選法 整除 搜索 進行 緩存 拓展 提前 相關 在一起

為方便討論,m=max(m,n)  n=min(m,n)

方法1:t=n  判斷t是不是n的因子  判斷t是不是m的因子

    優化:只在n的因子中考察t

方法2:n,m作因式分解,提取公共小因子的乘積

    

相關子問題:篩選法得到質數表

思考,拓展

1.用質數表優化算法

2.算法輸入數量的變化:多個整數求最大公因子

3.m=2x(m/2)成對考察因子

4.提前結束算法:m,n為不相等質數  m,n整除

5.維護每個數的最大公因子

6.算法的組合使用

設想算法

1.維護每個整數的最大因子,對於每個整數,在log時間得到最大因子鏈

100=50(100的最大因子)x2(小因子)

50=25x2

25=5x5

100的最大因子鏈:100 -> 50 -> 25 -> 5

搜索m,n的最大因子鏈,尋找第一個匹配項

100 -> 50(2) ->25(2) -> 5(5)

75 -> 25(3) ->5(5)

最大公因子=公共小因子x匹配大因子

復雜度log(最大因子鏈長度)+log(二分搜索匹配)+log(log數目小因子取公共序列)

原理:緩存最大因子,空間換時間

繼續優化方向:把三個步驟耦合在一起同時進行,減少常數因子

最大公因子求法