楼层求和算法

时间:2015-05-25 15:50:18

标签: algorithm math sum discrete-mathematics

是否有可以计算的快速算法

formula

? p,q,k,l,A和B是整数。 “快”是指它应该比简单的O(B-A)循环快得多。

相关: 如果我们设置k = 0,则有一个O(log(p)+ log(q))算法可以解决问题。

1 个答案:

答案 0 :(得分:1)

这是时间O(q)的解决方案。 (我假设p和q是相对素数,否则你应该先减少分数。)

对于[A,A + q]范围内的每个整数r,您可以确定

的值
floor [p*(A+r)/q + k/l]

让它为n(r)。然后你可以重新表达你的总和

sum_{r=0}^{q} sum_{y=0}^{y_max(r)} (n(r)+p*y),

,其中

y_max(r) = floor[ (B-A)/q ]  

现在每个内部和可以在O(1)中计算,因为它是完全显式的,并且总共得到O(q)。