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
Solution
count-good-numbers.py
class Solution:
def countGoodNumbers(self, n: int) -> int:
M = 10 ** 9 + 7
even = (n + 1) // 2
odd = n // 2
def ipower(base, exp):
if exp == 0: return 1
ans = ipower(base, exp // 2)
if exp % 2 == 0:
return (ans * ans) % M
else:
return (base * ans * ans) % M
return (ipower(5, even) * ipower(4, odd)) % M
count-good-numbers.cpp
class Solution {
public:
int M = 1e9 + 7;
long long power(long long base, long long exp){
if (exp == 0) return 1;
long long res = power(base, exp / 2) % M;
res *= res;
res %= M;
if (exp & 1)
res *= base;
res %= M;
return res;
}
int countGoodNumbers(long long n) {
long long even = (n + 1) / 2;
long long odd = n - even;
return (power(5, even) * power(4, odd)) % M;
}
};