🗒️1922. 统计好数字的数目
2024-12-14
| 2024-12-14
178  |  阅读时长 1 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Dec 14, 2024 03:00 AM
我们称一个数字字符串是 好数字 当它满足(下标从 0 开始)偶数 下标处的数字为 偶数 且 奇数 下标处的数字为 质数 (235 或 7)。
  • 比方说,"2582" 是好数字,因为偶数下标处的数字(2 和 8)是偶数且奇数下标处的数字(5 和 2)为质数。但 "3245" 不是 好数字,因为 3 在偶数下标处但不是偶数。
给你一个整数 n ,请你返回长度为 n 且为好数字的数字字符串 总数 。由于答案可能会很大,请你将它对 109 + 7 取余后返回 。
一个 数字字符串 是每一位都由 0 到 9 组成的字符串,且可能包含前导 0 。

暴力

class Solution { public: int countGoodNumbers(long long n) { const int MOD = 1e9 + 7; int ans = 1; for(long long i = 0; i < n; i++) { if(i % 2 == 0) { ans = (long long) ans * 5 % MOD; } else { ans = (long long) ans * 4 % MOD; } } return ans; } };
超出时间限制

快速幂

class Solution { public: const int MOD = 1e9 + 7; long long qmi(long long x, long long k) { long long res = 1; while(k) { if(k & 1) res = res * x % MOD; x = x * x % MOD; k >>= 1; } return res; } int countGoodNumbers(long long n) { return qmi(4, n / 2) * qmi(5, n / 2 + n % 2) % MOD;; } };

📎 参考

  • 【题单】数学算法
  • 2147. 分隔长廊的方案数2063. 所有子字符串中的元音
    Loading...