统计好数字的数目

问题

我们称一个数字字符串是 好数字 当它满足(下标从 0 开始)偶数 下标处的数字为 偶数 且 奇数 下标处的数字为 质数 (235 或 7)。

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

给你一个整数 n ,请你返回长度为 n 且为好数字的数字字符串 总数 。由于答案可能会很大,请你将它对 109 + 7 取余后返回 。

一个 数字字符串 是每一位都由 0 到 9 组成的字符串,且可能包含前导 0 。

示例

示例 1:

输入:n = 1
输出:5
解释:长度为 1 的好数字包括 "0","2","4","6","8" 。

示例 2:

输入:n = 4
输出:400

示例 3:

输入:n = 50
输出:564908303

思想

快速幂+模运算计算每个数组索引位置的可能性情况。

代码

 

const mod = 1_000_000_007

func countGoodNumbers(n int64) int {
    position1 := (n + 1) / 2
    position2 := n / 2

    pow5 := quickPow(5, position1)
    pow4 := quickPow(4, position2)

    result := (pow5 * pow4) % mod
    return int(result)
}

func quickPow(base, exp int64) int64 {
    result := int64(1)
    base %= mod
    for exp > 0 {
        if exp%2 == 1 {
            result = result * base % mod
        }
        base = base * base % mod
        exp /= 2
    }
    return result
}

 

posted @ 2025-04-19 13:44  我刀呢?  阅读(26)  评论(0)    收藏  举报