--- title: '974. Subarray Sums Divisible by K' description: Given an integer array nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k icon: dot topics: - { name: "Array", slug: "array" } - { name: "Hash Table", slug: "hash-table" } - { name: "Prefix Sum", slug: "prefix-sum" } issue: "https://github.com/prdlk/leetcode/issues/40" sidebar: label: 'Subarray Sums Divisible by K' badge: 'Medium' --- ### Example 1: - Input: `nums = [4,5,0,-2,-3,1], k = 5` - Output: `7` - Explanation: There are `7` subarrays with a sum divisible by `k = 5`: [4, `5`, `0`, `-2`, `-3`, 1], `[5]`, [5, 0], [5, `0`, `-2`, -3], `[0]`, [0, `-2`, -3], [-2, -3] ### Example 2: - Input: `nums = [5], k = 9` - Output: `0` ### Constraints: - `1 <= nums.length <= 3 * 10^4` - `-10^4 <= nums[i] <= 10^4` - `2 <= k <= 10^4` ## Solution ```py class Solution: def subarraysDivByK(self, nums: list[int], k: int) -> int: remainder_counts = {0: 1} cur_sum = 0 count = 0 for n in nums: cur_sum += n remainder = cur_sum % k if remainder in remainder_counts: count += remainder_counts[remainder] remainder_counts[remainder] = remainder_counts.get(remainder, 0) + 1 return count ```