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
and 8
) at even positions are even and the digits (5
and 2
) at odd positions are prime. However, "3245"
is not good because 3
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:
Solutions#
Solution 1#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 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
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 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;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| 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;
}
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| 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
}
|