zoukankan      html  css  js  c++  java
  • 最大公因子求法

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

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

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

  • 相关阅读:
    web程序入门六(缓存)
    web程序入门五(http无状态)
    web程序入门四(webform常用成员)
    web程序入门三(分页)
    web程序入门二(webforms web窗体 aspx)
    CodeForce 710E
    CodeForce 710C Magic Odd Square
    CodeForce 710B Optimal Point on a Line
    CodeForce 710A King Moves
    HDU 4003
  • 原文地址:https://www.cnblogs.com/qmcj/p/9095354.html
Copyright © 2011-2022 走看看