码迷,mamicode.com
首页 > 其他好文 > 详细

最大公因子求法

时间:2018-05-27 12:01:32      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:结束   变化   二分搜索   因式分解   一个   拓展   方向   提取   问题   

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

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

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

最大公因子求法

标签:结束   变化   二分搜索   因式分解   一个   拓展   方向   提取   问题   

原文地址:https://www.cnblogs.com/qmcj/p/9095354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!