-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolution.py
48 lines (33 loc) · 1.51 KB
/
solution.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
# When you divide the successive powers of 10 by 13 you get the following remainders of the integer divisions:
# 1, 10, 9, 12, 3, 4.
# Then the whole pattern repeats.
# Hence the following method:
# Multiply the right most digit of the number with the left most number in the sequence shown above,
# the second right most digit to the second left most digit of the number in the sequence.
# The cycle goes on and you sum all these products.
# Repeat this process until the sequence of sums is stationary.
# ...........................................................................
# Example: What is the remainder when 1234567 is divided by 13?
# 7×1 + 6×10 + 5×9 + 4×12 + 3×3 + 2×4 + 1×1 = 178
# We repeat the process with 178:
# 8x1 + 7x10 + 1x9 = 87
# and again with 87:
# 7x1 + 8x10 = 87
# ...........................................................................
# From now on the sequence is stationary and the remainder of 1234567 by 13 is the same as the remainder of 87 by 13: 9
# Call thirt the function which processes this sequence of operations on an integer n (>=0).
# thirt will return the stationary number.
# thirt(1234567) calculates 178, then 87, then 87 and returns 87.
# thirt(321) calculates 48, 48 and returns 48
def thirt(n):
reminders = [1, 10, 9, 12, 3, 4]
r = []
while True:
s = 0
for i, v in enumerate(str(n)[::-1]):
s += int(v) * reminders[i % 6]
n = s
if s not in r:
r.append(s)
else:
return r[-1]