1922. Count Good Numbers
Description
A digit string is good if the digits (0-indexed) at even indices are even and the digits at odd indices are prime (2
, 3
, 5
, or 7
).
- For example,
"2582"
is good because the digits (2
and8
) at even positions are even and the digits (5
and2
) at odd positions are prime. However,"3245"
is not good because3
is at an even index but is not even.
Given an integer n
, return the total number of good digit strings of length n
. Since the answer may be large, return it modulo 109 + 7
.
A digit string is a string consisting of digits 0
through 9
that may contain leading zeros.
Example 1:
Input: n = 1 Output: 5 Explanation: The good numbers of length 1 are "0", "2", "4", "6", "8".
Example 2:
Input: n = 4 Output: 400
Example 3:
Input: n = 50 Output: 564908303
Constraints:
1 <= n <= 1015
Solutions
Solution: Recursion
- Time complexity: O(logn)
- Space complexity: O(logn)
JavaScript
js
/**
* @param {number} n
* @return {number}
*/
const countGoodNumbers = function (n) {
const MODULO = BigInt(10 ** 9 + 7);
const PRIME = 4;
const EVEN = 5;
const count = Math.floor(n / 2);
const pow = (base, exponent) => {
let result = 1n;
if (exponent === 0) return result;
result *= pow(base, Math.floor(exponent / 2));
result *= result;
if (exponent % 2) result *= BigInt(base);
result %= MODULO;
return result;
};
return (pow(PRIME, count) * pow(EVEN, n % 2 ? count + 1 : count)) % MODULO;
};