假设,我有一组N
(N<=10^10) 自然数。其中,我想形成 2 个数字的集合,使得它们的总和可以被 整除k
。假设,N=4
即,数字:1, 2, 3, 4
和k=2
。因此,形成的集合将是::(1,3)
和(2,4)
。
没有重复,并且集合的第一个元素应该小于第二个元素。
以下是我的代码和逻辑。但我不知道为什么它对 N 的 lage 值给出不正确的答案:
int c[] = new int[K];
for (long j=1;j<=N;j++) {
++c[(int)j%K];//storing remainder in array
}
long count = 0;
if (K%2==0)
count = (c[0]*(c[0]-1) + c[K/2]*(c[K/2]-1))/2;//modulus that have value 0 or half of k, should be paired together, in C(N,2) ways.
else
count = c[0]*(c[0]-1)/2;
for (int j=1;j<(K+1)/2;j++) {
count+=c[j]*c[K-j];//sets whose modulus form a sum of K
}