小编Bre*_*son的帖子

欧几里得算法对上限下的数对所采取的步数总和的快速算法

注意:这可能涉及大量的数论,但我在网上找到的公式只是一个近似值,所以我相信一个精确的解决方案需要计算机进行某种迭代计算。

我的目标是找到一种有效的算法(就时间复杂度而言)来解决大 n 值的以下问题:

令 R(a,b) 是欧几里德算法为找到非负整数 a 和 b 的 GCD 所采取的步数。即 R(a,b) = 1 + R(b,a%b),且 R(a,0) = 0。给定一个自然数 n,求所有 1 的 R(a,b) 之和<= a,b <= n。

例如,如果 n = 2,则解为 R(1,1) + R(1,2) + R(2,1) + R(2,2) = 1 + 2 + 1 + 1 = 5。

由于有 n^2 对对应于要加在一起的数字,无论 R 的效率如何,简单地为每一对计算 R(a,b) 不会比 O(n^2) 好。因此,为了提高为了算法的效率,更快的方法必须以某种方式一次计算多个值的 R(a,b) 的总和。我怀疑有一些属性可能有用:

  1. 如果 a = b,则 R(a,b) = 1
  2. 如果 a < b,则 R(a,b) = 1 + R(b,a)
  3. R(a,b) = R(ka,kb) …

algorithm time-complexity number-theory cumulative-sum

8
推荐指数
1
解决办法
204
查看次数