最大公因子求法

Posted the WORLD

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大公因子求法相关的知识,希望对你有一定的参考价值。

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

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

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

以上是关于最大公因子求法的主要内容,如果未能解决你的问题,请参考以下文章

TOJ1164: 最大公因子

C++中一个数的最大因子怎么找?

欧几里得算法(辗转相除法)计算最大公约数

650. 2 Keys Keyboard

密码学 欧几里得算法

密码学 欧几里得算法