# k|a[j]*10**(k_i)+a[i]==>a[j]*10^(k_i)=-a[i](mod k)==》a[j]*10^(k_i)%k==a[i]%k
#枚举每一个i,找出j的数量即可
#只需要记录每一个i对应的n个j哪些a[j]*10^(k_i)
n,k=map(int,input().split())
a=list(map(int,input().split()))
N,K,res=int(1e5+10),11,0
ha=[[0]*N for _ in range(K)]
for i in range(n):
b=a[i]
for j in range(1,11):
b*=10
ha[j][b%k]+=1
for i in range(n):
ll=len(str(a[i]))
m=-a[i]%k
res+=ha[ll][m]
if(a[i]*(10**ll)%k==m):res-=1
print(res)
本题较难的点就是理解同余定理
存在整数a,b,和正整数k,若k|a-b(1)则有a \equiv b \pmod{k},等价于a mod k = b mod k(2)
( A:都是正余数时 B:同负余数 C:一正一负余数)
当A or B or C时:(1)成立,则BC or AC or AB(1)都成立,但是(2)不一定成立,只有同符号的余数才成立,python里面的余数都是正余数,所以本题中a[j]*10^(k_i) mod k = -a[i] mod k不需要处理-a[i] mod k 但是在C++里面需要把-a[i] mod d +k