参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int array[100005], t[100005]; //array记录每个元素值,t记录取余k,各余数对应前缀和的数量
int main()
{
ios::sync_with_stdio(false);
ll sum = 0, cnt = 0;
int n, k;
cin >> n >> k;
for(int i = 0; i < n; i++)
{
cin >> array[i];
sum += array[i]; //sum表示前缀和
t[sum % k]++; //依次取余
}
cnt = t[0]; //当前缀和本身可以整除k时,即可自身作为一个区间计算
for(int i = 0; i < k; i++)
{
cnt += t[i]*(t[i]-1)/2; //也可以和其他余数相等的前缀和两两搭配,求搭配书
}
cout << cnt;
return 0;
}