|


Summation of Floor Function Series
Date: 01/12/2009 at 09:11:36
From: Ivan
Subject: Formula for the sum of [ ]
Hello!
Is there any formula for the sum [p/q] + [2p/q] + [3p/q] + ... +
[np/q] (p, q, n are natural numbers)?
For example, [3/7] + [2*3/7] + [3*3/7] + [4*3/7] + [5*3/7]
= 0 + 0 + 1 + 1 + 2
= 4
I can't find a correct formula for any natural p and q. I suspect
that it does not exist. Maybe there is an algorithm for calculating
such sums?
It can be proved that if n = q - 1 then
[p/q] + [2p/q] + [3p/q] + ... + [(q-1)p/q] = (p-1)(q-1)/2.
Date: 01/14/2009 at 14:12:28
From: Doctor Vogler
Subject: Re: Formula for the sum of [ ]
Hi Ivan,
Thanks for writing to Dr. Math. That's a very interesting question.
I think that your suspicion is correct that there is not a closed-form
formula for the general sum. Fortunately, however, there is an
efficient algorithm for computing the sum.
By way of notation, I will write your sum as
sum(k=1, n, [kp/q]).
Your formula for n=q-1 can be generalized to reduce n by any multiple
of q, as in
sum(k=1, n, [kp/q]) =
pt(n+1) - t(pqt + p + q - 1)/2 + sum(k=1, n-tq, [kp/q])
You'll notice that when t=1 and n=q-1 (so that the last sum is zero),
you get your formula. Actually, your formula and this formula both
depend on p and q having no factors in common (so that p/q is a
fraction in reduced form).
Of course, it's also easy to reduce p by an integer multiple of q, and
then we get
sum(k=1, n, [kp/q]) = tn(n+1)/2 + sum(k=1, n, [k(p-qt)/q]).
But when n and p are both smaller than q, then it's harder to figure
out what to do. But here is one idea: We can count the number of
times that [kp/q] = m for each number m. It turns out that [kp/q] = m
when
m <= kp/q < m+1
or
mq/p <= k < (m+1)q/p
so that if both of those numbers are smaller than n, then this happens for
{(m+1)q/p} - {mq/p}
different values of k, where I write {x} to mean x rounded *up* to the
nearest integer (which is also sometimes called the ceiling function),
in parallel to your notation [x] to mean x rounded *down* to the
nearest integer (which is also sometimes called the floor function).
(It turns out that these satisfy {x} = -[-x] for all x. Also, if x is
an integer, then {x} = [x] = x, but if x is not an integer, then {x} =
[x] + 1.) The last (biggest) m that will appear is m = [np/q], which
happens for
n+1 - {mq/p}
different values of k. So that means that
sum(k=1, n, [kp/q]) =
m(n + 1 - {mq/p}) + sum(k=1, m-1, k({(k+1)q/p} - {kq/p})).
By looking at how this sum nearly telescopes, we can rewrite it as
sum(k=1, n, [kp/q]) = m(n + 1) - sum(k=1, m, {kq/p}).
If we additionally assume that mq/p is never an integer, then this is
the same as
sum(k=1, n, [kp/q]) = mn - sum(k=1, m, [kq/p]).
Now you might ask whether we have actually made any progress. We've
changed one sum that we don't know how to evaluate efficiently for
another sum that looks exactly the same. But here's the clincher:
The new sum changed around some numbers, allowing us to repeat all
three formulas and continue to make progress. So when we put it all
together, we get the following very efficient algorithm:
Input: Positive integers n, p, q
Output: s = sum(k=1, n, [kp/q])
Algorithm:
t = GCD(p, q)
p = p/t
q = q/t
s = 0
z = 1
while (q > 0) and (n > 0)
(point A)
t = [p/q]
s = s + ztn(n+1)/2
p = p - qt
(point B)
t = [n/q]
s = s + zpt(n+1) - zt(pqt + p + q - 1)/2
n = n - qt
(point C)
t = [np/q]
s = s + ztn
n = t
swap p and q (e.g. t = p, p = q, q = t)
z = -z
It can be proven that this algorithm will finish in polynomial time,
which basically means that a computer could use this to evaluate sums
very quickly even if the input numbers are hundreds or thousands of
digits long. In fact, this algorithm is comparable to the Euclidean
Algorithm for computing the GCD of two numbers.
The reason the algorithm works is that we initially force GCD(p, q) =
1, so that our formula for reducing n by a multiple of q will work.
Then subtracting qt from p and swapping p and q do not change this
fact. Then at points A, B, and C, the sum we are looking for is
s + z*sum(k=1, n, [kp/q]).
Going from A to B, we use the formula for reducing p by a multiple of
q. Going from B to C, we use the formula for reducing n by a multiple
of q. Then going from C to A, we use the last formula that I
demonstrated. The reason that kq/p is never an integer at that point
is that kq/p is never an integer at point C (for k <= t) is that when
we went from B to C, we caused that n < q, and then
k <= t <= np/q < qp/q = p
and since k is less than p, p cannot be a factor of k. And then since
q and p have no factors in common, p cannot be a factor of kq, so kq/p
is not an integer, and we can use the formula with [] rather than the
one with {}.
If you have any questions about this or need more help, please write
back and show me what you have been able to do, and I will try to
offer further suggestions.
- Doctor Vogler, The Math Forum
http://mathforum.org/dr.math/
Date: 01/15/2009 at 15:57:49
From: Ivan
Subject: Formula for the sum of [ ]
Thanks for your answer. But I do not understand clearly how did you
get this formula:
sum(k=1, n, [kp/q]) =
pt(n+1) - t(pqt + p + q - 1)/2 + sum(k=1, n-tq, [kp/q])
Could you help me?
Date: 01/17/2009 at 01:38:56
From: Doctor Vogler
Subject: Re: Formula for the sum of [ ]
Hi Ivan,
Oh, sure! That's basically just the formula that you already gave me,
just applied to the end of the sum and t times. You had said that
sum(k=1, q-1, [kp/q]) = (p - 1)(q - 1)/2.
Of course, this would also apply to
sum(k=0, q-1, [kp/q]) = (p - 1)(q - 1)/2.
The trick is to use this to sum
sum(k=m, m+q-1, [kp/q]).
Well, kp/q is going to have all of the same fractional parts; we just
move some of them from the beginning of the sum to the end. That is
the same as saying that
sum(k=0, q-1, kp/q - [kp/q]) = sum(k=m, m+q-1, kp/q - [kp/q]).
Does that make sense? But then the first parts, the sum of kp/q is
just a regular arithmetic series, so
(p/q)q(q-1)/2 - sum(k=0, q-1, [kp/q])
= (p/q)q(2m+q-1)/2 - sum(k=m, m+q-1, [kp/q]).
And then we substitute your formula and get
sum(k=m, m+q-1, [kp/q]) = p(2m+q-1)/2 - p(q-1)/2 + (p-1)(q-1)/2
= pm + (p-1)(q-1)/2.
Therefore
sum(k=1, n, [kp/q])
= sum(k=1, n-q, [kp/q]) + p(n-q+1) + (p-1)(q-1)/2.
Now we just iterate this, or prove by induction on t that
sum(k=1, n, [kp/q])
= pt(n+1) - t(pqt + p + q - 1)/2 + sum(k=1, n-tq, [kp/q]).
We've just proven it for t=1. The inductive step only requires
expanding the sum on the right side, sum(k=1, n-q, [kp/q]), by the
same formula, and simplifying.
Does that make sense?
- Doctor Vogler, The Math Forum
http://mathforum.org/dr.math/
Date: 01/26/2009 at 07:47:24 From: Ivan Subject: Formula for the sum of [ ] Hi, Doctor Vogler, First of all, thank you for your quick response. I am really interested in how to calculate such sums. What do you think, can we find an algorithm for computing sum(k=1, n, [sqrt(kp/q])), for example? We can count the number of times that [sqrt(kp/q)] = m for each number m, can we? [sqrt(kp/q)] = m when m <= sqrt(kp/q) < m+1 or m^2 q/p <= k < (m+1)^2 q/p and m:=1 to [sqrt(np/q)] Maybe, however, there is a more efficient algorithm? I wonder whether there are any methods of summation of functions? Once again, thank you very much.
Date: 01/26/2009 at 12:50:40
From: Doctor Vogler
Subject: Re: Formula for the sum of [ ]
Hi Ivan,
That's a good question. Certainly if p/q isn't very large (roughly if
p/q < n), then a better way to sum the series
sum(k=1, n, [sqrt(kp/q)])
would be to do the conversion you described, which results in
N(n+1) - sum(m=1, N, {qm^2/p}),
where N = [sqrt(np/q)] and you'll recall that I was using {x} to mean
the "ceiling" function (round up). You might even prefer this method
when p/q is a little larger than n, just because squaring is easier to
do than square-rooting. Then we can also reduce q by a multiple of p.
But I can't think of any other transformations that would allow us to
keep simplifying like we did in the other sum. Maybe if we could
figure out the value of
sum(m=1, p-1, [qm^2/p])
then we could use this to reduce N by a multiple of p. Even then,
however, I don't think it would be productive to convert back into a
sum of square roots again.
So I don't think you can do better than summing [sqrt(np/q)] terms
(which is not polynomial time, but maybe it's good enough for your
purposes).
- Doctor Vogler, The Math Forum
http://mathforum.org/dr.math/
|
Search the Dr. Math Library: |
[Privacy Policy] [Terms of Use]


Ask Dr. MathTM
© 1994-2013 The Math Forum
http://mathforum.org/dr.math/