Count divisibles in range
Count divisibles in range
def count_divisibles_in_range(start, end, n):
Let us take a breather by tackling a problem simple enough that its solution needs only a couple of
conditional statements and some arithmetic, but not even one loop or anything even more fancy.
The difficulty is coming up with the conditions that cover all possible cases of this problem exactly
right, including all of the potentially tricksy edge and corner cases, without being off-by-one.
Given three integers start, end and n so that start <= end, count how many integers between
start and end, inclusive, are divisible by n. Sure, you could solve this problem with the list
comprehension one-liner
return len([x for x in range(start, end+1) if x % n == 0])
but of course the automated tester is designed so that anybody trying to solve this problem in such
a blunt fashion will only find themselves running out of both time and space! Your code should have
no loops at all, but use only integer arithmetic and conditional statements to get to the truth. Also,
be careful with various edge cases and off-by-one pitfalls lurking in the bushes. Note that either
start or end can be negative or zero, but n is guaranteed to be greater than zero.
start | end | n | Expected result |
7 | 28 | 4 | 6 |
-77 | 19 | 10 | 9 |
-19 | -13 | 10 | 0 |
1 | 10**12 - 1 | 5 | 199999999999 |
0 | 10**12 - 1 | 5 | 200000000000 |
0 | 10**12 | 5 | 200000000001 |
-10**12 | 10**12 | 12345 | 162008911 |
Step by step
Solved in 4 steps with 2 images