Welcome to Subscribe On Youtube
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
-
class Solution { private int mod = 1000000007; public int countGoodNumbers(long n) { return (int) (myPow(5, (n + 1) >> 1) * myPow(4, n >> 1) % mod); } private long myPow(long x, long n) { long res = 1; while (n != 0) { if ((n & 1) == 1) { res = res * x % mod; } x = x * x % mod; n >>= 1; } return res; } }
-
int MOD = 1000000007; class Solution { public: int countGoodNumbers(long long n) { return (int) (myPow(5, (n + 1) >> 1) * myPow(4, n >> 1) % MOD); } private: long long myPow(long long x, long long n) { long long res = 1; while (n) { if ((n & 1) == 1) { res = res * x % MOD; } x = x * x % MOD; n >>= 1; } return res; } };
-
class Solution: def countGoodNumbers(self, n: int) -> int: mod = 10**9 + 7 def myPow(x, n): res = 1 while n: if (n & 1) == 1: res = res * x % mod x = x * x % mod n >>= 1 return res return myPow(5, (n + 1) >> 1) * myPow(4, n >> 1) % mod
-
const mod int64 = 1e9 + 7 func countGoodNumbers(n int64) int { return int(myPow(5, (n+1)>>1) * myPow(4, n>>1) % mod) } func myPow(x, n int64) int64 { var res int64 = 1 for n != 0 { if (n & 1) == 1 { res = res * x % mod } x = x * x % mod n >>= 1 } return res }