题目描述
给定一个长度为N的数列,A1, A2, ... AN。
如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。
你能求出数列中总共有多少个K倍区间吗?输入
第一行包含两个整数N和K。(1 <= N, K <= 100000)
以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)输出
输出一个整数,代表K倍区间的数目。
样例输入
5 2 1 2 3 4 5
解题思路: 前缀和+同余定理。。
同余定理:如果两个整数 a 和 b,(a-b)%m == 0 , 那么 a%m 和 b%m 的余数相等 。。。
针对于本 题的数据:
s数组存的是前缀和。。 。
k=2;
1 2 3 4 5
s[1]=1 s[2]=s[1]+a[2]=3 s[3]=s[2]+a[3]=6 s[4]=s[3]+a[4]=10 s[5]=s[4]+a[5]=15
序号 值 s[i]%k
1 1 s[1]%k=1;
2 2