-
Notifications
You must be signed in to change notification settings - Fork 0
/
count_div.py
61 lines (39 loc) · 1.5 KB
/
count_div.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# -*- coding: utf-8 -*-
"""
Author: Niall O'Connor
# https://app.codility.com/programmers/lessons/5-prefix_sums/count_div/
Write a function:
def solution(A, B, K)
that, given three integers A, B and K, returns the number of integers
within the range [A..B] that are divisible by K, i.e.:
{ i : A ≤ i ≤ B, i mod K = 0 }
For example, for A = 6, B = 11 and K = 2, your function should return 3,
because there are three numbers divisible by 2 within the range [6..11],
namely 6, 8 and 10.
Write an efficient algorithm for the following assumptions:
A and B are integers within the range [0..2,000,000,000];
K is an integer within the range [1..2,000,000,000];
A ≤ B.
# 100% solution https://app.codility.com/demo/results/trainingJWW77X-8J8/
"""
import time
def solution(A, B, K):
# if A, B, K are already valid inputs!
return ((B // K) + 1) - ((A + K -1) // K)
if __name__ == '__main__':
tests = (
# Test cases are in pairs of (expected, (args,))
(3, (6, 11, 2,)),
)
for expected, args in tests:
# record performance of solution
tic = time.perf_counter()
res = solution(*args)
toc = time.perf_counter()
print(f'ARGS produced {res} in {toc - tic:0.8f} seconds')
if args[0] is None:
continue # This is just a speed test
try:
assert(expected == res)
except AssertionError as e:
print(f'ERROR {args} produced {res} when {expected} was expected!')