找到最小迭代次数以达到一定的总和

找到最小迭代次数以达到一定的总和,第1张

找到最小迭代次数以达到一定的总和

现在我可以提供

O(nlogn)
解决方案。

该方法似乎是最大公约数

使用

f(x, y)
表达此状态的最小迭代次数。可以通过
f(x-y, y)
if
x>y
f(x,y-x)
if
达到此状态
x<y
。我们可以看到达到状态的方式
(x,y)
是唯一的,我们可以
O(logn)
像gcd那样计算它。

答案是

min( f(n, i) | 1 <= i < n)
如此复杂
O(nlogn)

python代码:

def gcd (n, m):    if m == 0:        return n    return gcd (m, n%m)def calculate (x, y):    if y == 0:        return -1    return calculate (y, x%y) + x/ydef solve (n):    x = 0    min = n    for i in xrange (1, n):        if gcd (n, i) == 1: ans = calculate (n, i) if ans < min:     min = ans     x = i    print minif __name__ == '__main__':    solve (5)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5560428.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存