用Python从N个自然数中找出总和值可以被k整除的对数的程序

假设我们有一个数 n 和另一个值 k,假设我们有一个包含前 N 个自然数的数组 A,我们必须从 A 中找到元素 A[i] 和 A[j] 对的总数,使得,i < j 并且它们的和可以被 k 整除。

因此,如果输入像 n = 10 k = 4,那么输出将是 10,因为有 10 对的总和可以被 4 整除。 [(1,3), (1,7), (2,6) , (2,10), (3,5), (3,9), (4,8), (5,7), (6,10), (7,9)]

示例

让我们看看以下实现以获得更好的理解 -

def solve(n, k):
   m = n // 克
   r = n % k

   b = {}
   for i in range(k) :
      b[i] = m
   for i in range(m*k+1, n+1) :
      j = i % k
      b[j] = b[j] + 1

   c = 0
   for i in range(k) :
      i1 = i
      i2 = (k - i) % k
      if i1 == i2 :
         c = c + b[i] * (b[i]-1)
      else :
         c = c + b[i1] * (b[i2])
   return c//2

n = 10
k = 4
print(solve(n, k))

输入

4, 27
输出结果
10

猜你喜欢