Count the subsequences of length 4 divisible by 9
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
In computational mathematics and algorithm design, one intriguing problem is counting the number of subsequences of a given length from an array that satisfy a particular divisibility condition. Specifically, we will explore how to count the subsequences of length 4 that are divisible by 9 from a given sequence of numbers. This problem involves concepts of combinatorics, number theory, and dynamic programming, and understanding it thoroughly requires a mixture of theory and practical coding approaches.
Problem Statement
Given a sequence of integers, the goal is to find all possible subsequences of length 4 whose sum is divisible by 9.
Definition
A subsequence is a sequence derived from another sequence by deleting some or no elements without changing the order of the remaining elements. For example, the subsequences of length 4 of the sequence `[1, 2, 3, 4, 5]` include `[1, 2, 3, 4]`, `[1, 2, 3, 5]`, etc.
Approach Overview
To solve this problem, we can use dynamic programming to efficiently compute the count of relevant subsequences. Here's how the approach generally unfolds:
- Dynamic Programming Table: Use a table `dp[i][j]` where `i` is the length of the subsequence being considered, and `j` is the modulo 9 value of the subsequence sum. The value in the cell `dp[i][j]` indicates the number of subsequences of length `i` that have a sum `j` modulo 9.
- Initialization: Start by initializing `dp[0][0]` to 1, representing the empty subsequence (which trivially satisfies modulo 9 since its sum is 0).
- Iterate Through Elements: For each element in the sequence, update the `dp` table by considering whether to include the current element in the subsequences. The update rule for counting is based on previously computed subsequences.
- Calculate Final Count: The final answer will be found at `dp[4][0]`, which represents the number of subsequences of length 4 with sums divisible by 9.
Detailed Execution
Below is an execution example that outlines these steps:
- Dynamic Table Structure: The table `dp` uses indices to track two variables: subsequence length and sum modulo 9.
- Consideration of New Element: For each element `num` in the sequence, add it to existing subsequences (tracked in `dp`) and update the possible sums modulo 9.
- Backward Iteration: The loops are structured backwards over subsequences to ensure that results from this iteration can be freely used without corruption by subsequent operations in this same pass.
- Time Complexity: The approach runs in , where is the length of considered subsequences, is the modulus value (9 in this case), and is the total length of the array.
- Space Complexity: Space-utilization is to store the DP table.
Related reading
- count the total number of 1's in integers from 1 to N
- Counting according to query
- Counting alternating numbers in an array
- counting boolean parenthesizations implementation
- counting combinations and permutations efficiently
- Counting subsets with given sizes of a set
- Counting inversions in an array
- Counting inversions in ranges

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.