统计好数字的数目
问题
我们称一个数字字符串是 好数字 当它满足(下标从 0 开始)偶数 下标处的数字为 偶数 且 奇数 下标处的数字为 质数 (2,3,5 或 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 }
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号