n, p = list(map(int, input().split()))

s = list(map(int, list(eval(input()))))[::-1]



sum = 0

cnt = [0] * p

cnt[0] = 1



ans = 0

if p in [2, 5]:

    if p == 2:

        ok_list = [0, 2, 4, 6, 8]

    if p == 5:

        ok_list = [0, 5]



    for i in range(n):

        d = s[i]

        if d in ok_list:

            ans += n - i



else:

    for i in range(n):

        d = s[i] * pow(10, i, p)

        sum = (sum + d) % p

        cnt[sum] += 1

    for i in range(p):

        ans += cnt[i] * (cnt[i]-1) // 2

print(ans)

n, P = list(map(int, input().split()))

S = eval(input())

ans = 0

#----------------------------------------------

# 1.

# int(S[a:b]) * 10 ** (n - b) == (int(S[a: n]) - int(S[b: n])) で表される

# 例

# S = 1234

# a = 1, b = 3 のとき

# 23 = (234 - 4) // 10 ** (4 - 3)

#    =  230 // 10

#    =  23

#

# 2.

# Pは素数のため　P = 2, 5　のとき以外は　１０の約数でない

# A * (10 ** x) が Pで割れるとき　A は P の倍数　(x は任意定数)

#

# 3.

# 1. の式を mod P で考える

# int(S[a: b]) * 10 ** (n - b) == (int(S[a: n]) - int(S[b: n]))

# ⇒　(S[a: b] * 10 ** (n - b)) % P == (S[a: n] - S[b: n]) % P  (mod P)

# ⇒　(S[a: b] % P) * (10 ** (n - b) % P) == (S[a: n] % P) - (S[b: n] % P)  (mod P)

# 2.より P = 2, 5以外のときは 10 ** (n - b) % P != 0となるため

# (S[a: n] % P) - (S[b: n] % P)　= 0　すなわち　(S[a: n] % P) == (S[b: n] % P)のとき

# S[a:b] % P　= 0である

#

# これより

# S[i: n] % P (0 <= i < n) を求めれば

# 以下のコードのようにS[i: j] % P を求めることができる (0 <= i < n, i <= j < n)

#----------------------------------------------

#まずS[i: n] % P (0 <= i < n) を求める (remain に格納する)

remain = [0] * P

remain[0] += 1

d = 1

left = 0

for i in range(n):

    # print(left)

    left = (left + int(S[n - i - 1]) * d) % P

    remain[left] += 1

    d = d * 10 % P

# print(remain)

for r in remain:

    ans += r * (r - 1) // 2

#----------------------------------------------

# 4.P = 2, 5　のときについて考える

#     1. P = 2 のとき

#         ある数の下１桁が2の倍数のとき、その数は2の倍数であるため

#         S[i] % 2 == 0 のとき

#         S[h:i] % 2 == 0 (0 <= h <= i)

#         よって以下のようなコードで答えを求めることができる

#----------------------------------------------

if P == 2:

    ans = 0

    for i in range(n):

        if int(S[i]) % 2 == 0:

            ans += i + 1

    print(ans)

#----------------------------------------------

    # 2. P = 5 のときもP = 2 のときと同様に考えれば良いため

#----------------------------------------------

if P == 5:

    ans = 0

    for i in range(n):

      if int(S[i]) % 5 == 0:

          ans += i + 1

    print(ans)

if P != 2 and P != 5:

    print(ans)

n, p = list(map(int, input().split()))
s = list(map(int, list(eval(input()))))[::-1]
sum = 0
cnt = [0] * p
cnt[0] = 1
ans = 0
if p in [2, 5]:
    if p == 2:
        ok_list = [0, 2, 4, 6, 8]
    if p == 5:
        ok_list = [0, 5]
    for i in range(n):
        d = s[i]
        if d in ok_list:
            ans += n - i
else:
    for i in range(n):
        d = s[i] * pow(10, i, p)
        sum = (sum + d) % p
        cnt[sum] += 1
    for i in range(p):
        ans += cnt[i] * (cnt[i] - 1) // 2
print(ans)

n, P = list(map(int, input().split()))
S = eval(input())
ans = 0
# ----------------------------------------------
# 1.
# int(S[a:b]) * 10 ** (n - b) == (int(S[a: n]) - int(S[b: n])) で表される
# 例
# S = 1234
# a = 1, b = 3 のとき
# 23 = (234 - 4) // 10 ** (4 - 3)
#    =  230 // 10
#    =  23
#
# 2.
# Pは素数のため　P = 2, 5　のとき以外は　１０の約数でない
# A * (10 ** x) が Pで割れるとき　A は P の倍数　(x は任意定数)
#
# 3.
# 1. の式を mod P で考える
# int(S[a: b]) * 10 ** (n - b) == (int(S[a: n]) - int(S[b: n]))
# ⇒　(S[a: b] * 10 ** (n - b)) % P == (S[a: n] - S[b: n]) % P  (mod P)
# ⇒　(S[a: b] % P) * (10 ** (n - b) % P) == (S[a: n] % P) - (S[b: n] % P)  (mod P)
# 2.より P = 2, 5以外のときは 10 ** (n - b) % P != 0となるため
# (S[a: n] % P) - (S[b: n] % P)　= 0　すなわち　(S[a: n] % P) == (S[b: n] % P)のとき
# S[a:b] % P　= 0である
#
# これより
# S[i: n] % P (0 <= i < n) を求めれば
# 以下のコードのようにS[i: j] % P を求めることができる (0 <= i < n, i <= j < n)
# ----------------------------------------------
# まずS[i: n] % P (0 <= i < n) を求める (remain に格納する)
remain = [0] * P
remain[0] += 1
d = 1
left = 0
for i in range(n):
    # print(left)
    left = (left + int(S[n - i - 1]) * d) % P
    remain[left] += 1
    d = d * 10 % P
# print(remain)
for r in remain:
    ans += r * (r - 1) // 2
# ----------------------------------------------
# 4.P = 2, 5　のときについて考える
#     1. P = 2 のとき
#         ある数の下１桁が2の倍数のとき、その数は2の倍数であるため
#         S[i] % 2 == 0 のとき
#         S[h:i] % 2 == 0 (0 <= h <= i)
#         よって以下のようなコードで答えを求めることができる
# ----------------------------------------------
if P == 2:
    ans = 0
    for i in range(n):
        if int(S[i]) % 2 == 0:
            ans += i + 1
    print(ans)
# ----------------------------------------------
# 2. P = 5 のときもP = 2 のときと同様に考えれば良いため
# ----------------------------------------------
if P == 5:
    ans = 0
    for i in range(n):
        if int(S[i]) % 5 == 0:
            ans += i + 1
    print(ans)
if P != 2 and P != 5:
    print(ans)

-n, p = list(map(int, input().split())) -s = list(map(int, list(eval(input()))))[::-1] -sum = 0 -cnt = [0] * p -cnt[0] = 1 +n, P = list(map(int, input().split())) +S = eval(input()) -if p in [2, 5]: -    if p == 2: -        ok_list = [0, 2, 4, 6, 8] -    if p == 5: -        ok_list = [0, 5] +# 1. +# int(S[a:b]) * 10 ** (n - b) == (int(S[a: n]) - int(S[b: n])) で表される +# 例 +# S = 1234 +# a = 1, b = 3 のとき +# 23 = (234 - 4) // 10 ** (4 - 3) +#    =  230 // 10 +#    =  23 +# +# 2. +# Pは素数のため　P = 2, 5　のとき以外は　１０の約数でない +# A * (10 ** x) が Pで割れるとき　A は P の倍数　(x は任意定数) +# +# 3. +# 1. の式を mod P で考える +# int(S[a: b]) * 10 ** (n - b) == (int(S[a: n]) - int(S[b: n])) +# ⇒　(S[a: b] * 10 ** (n - b)) % P == (S[a: n] - S[b: n]) % P  (mod P) +# ⇒　(S[a: b] % P) * (10 ** (n - b) % P) == (S[a: n] % P) - (S[b: n] % P)  (mod P) +# 2.より P = 2, 5以外のときは 10 ** (n - b) % P != 0となるため +# (S[a: n] % P) - (S[b: n] % P)　= 0　すなわち　(S[a: n] % P) == (S[b: n] % P)のとき +# S[a:b] % P　= 0である +# +# これより +# S[i: n] % P (0 <= i < n) を求めれば +# 以下のコードのようにS[i: j] % P を求めることができる (0 <= i < n, i <= j < n) +# まずS[i: n] % P (0 <= i < n) を求める (remain に格納する) +remain = [0] * P +remain[0] += 1 +d = 1 +left = 0 +for i in range(n): +    # print(left) +    left = (left + int(S[n - i - 1]) * d) % P +    remain[left] += 1 +    d = d * 10 % P +# print(remain) +for r in remain: +    ans += r * (r - 1) // 2 +# 4.P = 2, 5　のときについて考える +#     1. P = 2 のとき +#         ある数の下１桁が2の倍数のとき、その数は2の倍数であるため +#         S[i] % 2 == 0 のとき +#         S[h:i] % 2 == 0 (0 <= h <= i) +#         よって以下のようなコードで答えを求めることができる +if P == 2: +    ans = 0 -        d = s[i] -        if d in ok_list: -            ans += n - i -else: +        if int(S[i]) % 2 == 0: +            ans += i + 1 +    print(ans) +# 2. P = 5 のときもP = 2 のときと同様に考えれば良いため +if P == 5: +    ans = 0 -        d = s[i] * pow(10, i, p) -        sum = (sum + d) % p -        cnt[sum] += 1 -    for i in range(p): -        ans += cnt[i] * (cnt[i] - 1) // 2 -print(ans) +        if int(S[i]) % 5 == 0: +            ans += i + 1 +    print(ans) +if P != 2 and P != 5: +    print(ans)