是否有可以计算的快速算法
? p,q,k,l,A和B是整数。 “快”是指它应该比简单的O(B-A)循环快得多。
相关: 如果我们设置k = 0,则有一个O(log(p)+ log(q))算法可以解决问题。
答案 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)。