我们给出两个数字M和N.我们需要计算N以下所有整数的总和,它们可以被M整除。
是否可以用O(1)复杂度来解决?
我知道这是一个非常简单的程序,可以通过循环轻松完成。但我想知道是否有可能应用某种公式或某种东西来直接计算可被C整除的数字之和。
答案 0 :(得分:3)
确实存在O(1)解决方案:
首先利用整数算术来计算n = N / M
。 n
是算术级数中的术语数,第一项和公共差异等于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)
计算