若一段连续子序列[l, r]和为k的倍数
则必定有 sum[r] - sum[l - 1] % k == 0
由同余定理 sum[r] % k == sum[l - 1] % k
由输入数据顺序则必定有已输入数据均在当前数据之前
则可用brr数组记录当前数之前的所有模数 得解
typedef long long ll;
const int MAXN = 1e6 + 10;
ll arr[MAXN] = {0};
ll brr[MAXN] = {0};
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0); cout.tie(0);
//freopen("D://test.in", "r", stdin);
//freopen("D://test.out", "w", stdout);
int n, m;
ll ans = 0;
cin >> n >> m;
for(int i = 1, t; i <= n; i++)
cin >> arr[i], arr[i] += arr[i - 1], ans += brr[arr[i] % m]++;
ans += brr[0];
cout<<ans<<'\n';
return 0;
}