Book Reading (Codeforces 1213C)
Tags: Math, math

Polycarp is reading a book consisting of $$$n$$$ pages numbered from $$$1$$$ to $$$n$$$. Every time he finishes the page with the number divisible by $$$m$$$, he writes down the last digit of this page number. For example, if $$$n=15$$$ and $$$m=5$$$, pages divisible by $$$m$$$ are $$$5, 10, 15$$$. Their last digits are $$$5, 0, 5$$$ correspondingly, their sum is $$$10$$$.Your task is to calculate the sum of all digits Polycarp has written down.You have to answer $$$q$$$ independent queries.

Input: The first line of the input contains one integer $$$q$$$ ($$$1 \le q \le 1000$$$) — the number of queries.The following $$$q$$$ lines contain queries, one per line. Each query is given as two integers $$$n$$$ and $$$m$$$ ($$$1 \le n, m \le 10^{16}$$$) — the number of pages in the book and required divisor, respectively.

Output: For each query print the answer for it — the sum of digits written down by Polycarp.


Sample Inputs:
7
1 1
10 1
100 3
1024 14
998244353 1337
123 144
1234312817382646 13

Sample Outputs:
1
45
153
294
3359835
0
427262129093995

Solution (Python):
for s in [*open(0)][1:]:
    (n, m) = map(int, s.split())
    a = [m * i % 10 for i in range(10)]
    x = n // m
    print(x // 10 * sum(a) + sum(a[:x % 10 + 1]))

Solution (Python):
""""""
q = int(input())
cifri = [[0], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [2, 4, 6, 8, 0], [3, 6, 9, 2, 5, 8, 1, 4, 7, 0], [4, 8, 2, 6, 0], [5, 0], [6, 2, 8, 4, 0], [7, 4, 1, 8, 5, 2, 9, 6, 3, 0], [8, 6, 4, 2, 0], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]]
for i in range(q):
    (n, m) = map(int, input().split())
    if m > n or m % 10 == 0:
        print(0)
        continue
    kl = n // m
    pc = m % 10
    res = kl // len(cifri[pc]) * sum(cifri[pc]) + sum(cifri[pc][:kl % len(cifri[pc])])
    print(res)

Solution (Python):
for i in range(int(input())):
    (n, m) = map(int, input().split())
    (a, b, bi) = (n // m, int(str(m)[-1]), int(str(m)[-1]))
    if b == 0:
        print('0')
    else:
        v = []
        while int(str(b)[-1]) > 0:
            v.append(int(str(b)[-1]))
            b += bi
        v.append(0)
        (l, bd, ad) = (len(v), 0, 0)
        (c, d) = (a // l, a % l)
        for i in range(l):
            bd += v[i]
        for i in range(d):
            ad += v[i]
        print(int(c * bd + ad))