好数字 是(下标从 0 开始)偶数 下标处的数字为 偶数 且 奇数 下标处的数字为 质数 (2,3,5 或 7)。

比方说,"2582" 是好数字,因为偶数下标处的数字(2 和 8)是偶数且奇数下标处的数字(5 和 2)为质数。

一个 数字字符串 是每一位都由 0 到 9 组成的字符串,且可能包含前导 0 。(n<=1e18)

输入:n = 1

输出:5

解释:长度为 1 的好数字包括 "0","2","4","6","8" 。

思路:排列数 = 数字种类 ^ (坑位数);组合数 = 排列数相乘

class Solution {
public:
long long mod = 1e9 + 7;
long long quickPow(long long a, long long b) {
long long ans = 1;
while (b) {
if (b & 1) ans = (ans * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return ans;
}
int countGoodNumbers(long long n) {
return quickPow(5, (n + 1) / 2) * quickPow(4, n / 2) % mod;
}
};