int subarraysDivByK(int* A, int ASize, int K){
int fuzhu[ASize];
fuzhu[0] = A[0]%K;
if(fuzhu[0]<0)
fuzhu[0] += K;
int answer = 0;
int i;
for(i = 1; i < ASize; i++){
fuzhu[i] = (fuzhu[i-1]+A[i])%K;
if(fuzhu[i]<0)
fuzhu[i] += K;
}
int yu[K];
for(i = 0; i<K; i++){
yu[i] = 0;
}
for(i = 0; i < ASize; i++){
yu[fuzhu[i]]++;
}
yu[0] +=1;
for(i = 0; i<K; i++){
if(yu[i] >1)
answer+= yu[i]*(yu[i]-1)/2;
}
return answer;
}
原文:https://www.cnblogs.com/gallien/p/14300844.html