最大公因子求法

为方便讨论,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数目小因子取公共序列)

原理:缓存最大因子,空间换时间

继续优化方向:把三个步骤耦合在一起同时进行,减少常数因子

posted on 2018-05-27 10:47  秦梦超  阅读(1319)  评论(0编辑  收藏  举报

导航