题目链接
题解
1.求出前缀和
2.[l,r]之和%p == (sum[r]-sum[l-1])%p
3.(sum[r]-sum[l-1])%p == 0
4.sum[r] % p == sum[l-1] %p
5.求有多少个两两组队
6.最后在加上本身的sum[i] % p == 0的
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005];
ll s[100005];
ll cnt[100005];
int main(){
ll n,k;
cin>>n>>k;
ll sum1=0;
for(ll i=1;i<=n;i++){
cin>>a[i];
}
for(ll i=1;i<=n;i++) s[i]=(s[i-1]+a[i])%k;
for(ll i=1;i<=n;i++){
cnt[s[i]]++;
}
for(ll i=0;i<k;i++){
ll a=cnt[i];
sum1 += (a*(a-1)/2);
}
cout<<sum1+cnt[0]<<endl;
return 0;
}