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 (2and8) at even positions are even and the digits (5and2) at odd positions are prime. However,"3245"is not good because3is 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: Fast Power
Easy to see that f(n) = (4 + (n & 1)) * f(n – 1), f(1) = 5
However, since n is huge, we need to rewrite f(n) as 4n/2 * 5(n+1)/2 and use fast power to compute it.
Time complexity: O(logn)
Space complexity: O(1)
C++
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Author: Huahua constexpr int kMod = 1e9 + 7; long long modPow(long long base, long long n) { long long ans = 1; while (n) { if (n & 1) ans = (ans * base) % kMod; base = (base * base) % kMod; n >>= 1; } return ans; } class Solution { public: int countGoodNumbers(long long n) { return (modPow(4, n / 2) * modPow(5, (n + 1) / 2)) % kMod; } }; |
请尊重作者的劳动成果,转载请注明出处!花花保留对文章/视频的所有权利。
如果您喜欢这篇文章/视频,欢迎您捐赠花花。
If you like my articles / videos, donations are welcome.


Be First to Comment