最大公因子求法
为方便讨论,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数目小因子取公共序列)
原理:缓存最大因子,空间换时间
继续优化方向:把三个步骤耦合在一起同时进行,减少常数因子