-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathchocolates_by_numbers.py
51 lines (37 loc) · 1.35 KB
/
chocolates_by_numbers.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
"""
Two positive integers N and M are given. Integer N represents the number
of chocolates arranged in a circle, numbered from 0 to N − 1.
You start to eat the chocolates. After eating a chocolate you
leave only a wrapper.
You begin with eating chocolate number 0.
Then you omit the next M − 1 chocolates or wrappers on the circle,
and eat the following one.
More precisely, if you ate chocolate number X, then you will next eat
the chocolate with number (X + M) modulo N (remainder of division).
You stop eating when you encounter an empty wrapper.
For example, given integers N = 10 and M = 4.
You will eat the following chocolates: 0, 4, 8, 2, 6.
The goal is to count the number of chocolates that you will eat,
following the above rules.
Write a function:
def solution(N, M)
that, given two positive integers N and M,
returns the number of chocolates that you will eat.
For example, given integers N = 10 and M = 4. the function should return 5,
as explained above.
Assume that:
N and M are integers within the range [1..1,000,000,000].
Complexity:
* expected worst-case time complexity is O(log(N+M));
* expected worst-case space complexity is O(log(N+M)).
"""
def solution(N, M):
x = 0
while x != 1:
x = N
y = M
while y != 0:
(x, y) = (y, x % y)
N = N // x
M = M // x
return N