计算低于N的数的倍数与O(1)复杂度的总和?

时间:2016-07-08 12:15:11

标签: java algorithm time-complexity factors

我们给出两个数字M和N.我们需要计算N以下所有整数的总和,它们可以被M整除。

是否可以用O(1)复杂度来解决?

我知道这是一个非常简单的程序,可以通过循环轻松完成。但我想知道是否有可能应用某种公式或某种东西来直接计算可被C整除的数字之和。

2 个答案:

答案 0 :(得分:3)

确实存在O(1)解决方案:

首先利用整数算术来计算n = N / Mn算术级数中的术语数,第一项和公共差异等于M

总和(来自算术级数的公式)是

n * (1 + n) * M / 2

例如,考虑N = 23,M = 5.您在5 + 10 + 15 + 20之后是50.封闭式解决方案评估为4 * 5 * 5/2,也是50。 / p>

答案 1 :(得分:2)

L:=floor(M/N)

M + 2*M + 3*M + ... + L*M 

= M (1+2+3+4+...+L)

这可以通过wikipedia summation

解决
= M*(L*(L+1)/2)

这可以用O(1)

计算