Submission #76272378


Source Code Expand

import math

def f(n, m):
    MOD = 998244353
    ans = 0
    
    max_d = 0
    temp = n
    while temp > 0:
        max_d += 1
        temp //= 10
        
    p10 = 1
    pow10_mod_m = 1
    
    for _ in range(max_d):
        min_y = p10
        max_y = min(p10 * 10 - 1, n)
        
        count_y = max_y - min_y + 1
        if count_y <= 0:
            break
            
        pow10_mod_m = (pow10_mod_m * 10) % m
        d = (pow10_mod_m - 1 + m) % m
        
        g = math.gcd(m, d)
        k = m // g
        
        count_x = n // k
        
        term = ((count_x % MOD) * (count_y % MOD)) % MOD
        ans = (ans + term) % MOD
        
        p10 *= 10
        
    return ans

t = int(input())
for _ in range(t):
    n, m = map(int, input().split())
    print(f(n, m))

Submission Info

Submission Time
Task E - x + y ≡ x + y
User gett
Language Python (PyPy 3.11-v7.3.20)
Score 450
Code Size 835 Byte
Status AC
Exec Time 130 ms
Memory 109044 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 1
AC × 7
Set Name Test Cases
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 48 ms 79380 KiB
01_random_00.txt AC 102 ms 108916 KiB
01_random_01.txt AC 112 ms 108812 KiB
01_random_02.txt AC 128 ms 109044 KiB
01_random_03.txt AC 116 ms 108804 KiB
01_random_04.txt AC 130 ms 108836 KiB
01_random_05.txt AC 127 ms 108844 KiB