One-dimensional difference explanation
#include<iostream>
using namespace std;
#define ll long long
int a[100005];
ll sum[100005];
ll res[100005];
ll ans;
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sum[0]=0;
res[sum[0]]++; //注意加上了个a[0]=0 如果区别 1-3满足 则sum[0]%k==sum[3]%k
for(int i=1;i<=n;i++)
{
sum[i]=(sum[i-1]+a[i])%k;
res[sum[i]]++;
}
for(int i=0;i<k;i++)
{
ans+=(res[i]*(res[i]-1))/2;
}
printf("%lld",ans);
}