Educational Codeforces Round 173 B.Digits 数的可除性法则
Codeforces 题解 - [Educational Codeforces Round 173 B.Digits]
题目描述
Artem 在黑板上连续写下数字 d ,恰好是 n! 次。因此,他得到的数是 dddddd…ddd (恰好是 n! 位)。
现在他很好奇,从 1 到 9 中的哪些奇数数字可以除以黑板上写的数字。
输入格式
输入
第一行包含一个整数 t ( 1≤t≤100 ) — 测试用例的数量。接下来是 t 个测试用例。
每个测试用例由一行组成,其中包含两个整数 n 和 d ( 2≤n≤109 , 1≤d≤9 )。
输出格式
输出
对于每个测试用例,输出 1 到 9 中能整除该数字的所有奇数,按升序输出。
题目大意
题目给定了一个形如 dddd...d
的数字,长度为 n!
,我们需要判断哪些奇数(1, 3, 5, 7, 9)能够整除这个数字。
输入
3
2 6
7 1
8 5
输出
1 3
1 3 7 9
1 3 5 7 9
解题思路
解法 1
我们可以将数字表示为 C=d×111...1,其中 111...1 是由 n! 个 1 组成的数字。
对于这种情况,我们可以利用 S(n)=100+101+102+...+10n!−1 来简化计算。这个数 C 可以表示为:
C=d×10n!−19
令
T=10n!−19
分析C
- 1: 任何数都能被 1 整除,因此答案中始终包含 1。
- 3: 数字的各位和能被 3 整除时,数字能被 3 整除。当 n!≥3 时,S(n)%3=0,所以 C 一定能被 3 整除。
- 5: 一个数能被 5 整除,必须以 0 或 5 结尾。但由于 S(n) 的形式决定了其末尾不能是 0 或 5,因此 S(n) 绝不可能被 5 整除。
- 7: S(n) 模 7 有周期性。当 n!≥6 时,
- S(n) 一定能被 7 整除。
S(n) = 10^0 + 10^1 + 10^2 + ''' + 10^(n! - 1)
我们能注意到
100 ≡ 1 (mod 7)
101 ≡ 3 (mod 7)
102 ≡ 2 (mod 7)
103 ≡ 6 (mod 7)
104 ≡ 4 (mod 7)
105 ≡ 5 (mod 7)
106≡1(mod7)
可知周期为6
10k≡10k%6(mod7)10的任何倍六次方的模7结果 都是1106k≡1(mod7)即106k−1≡0(mod7)当n!≥6 时,此时n!,一定包含6的倍数1*2*3···n!,即n≥3时10n!−1≡0(mod7)说明 10n! - 1 是 7的倍数
接下来考虑分母9.因为9和7互质,
∴10n!−19 能被7整除的条件就是 10n! - 1本身就是7的倍数
∴当n!包含6的倍数的时即n>=3时,我们可以得出
10n!−19 ≡ 0 (mod 7)- 9: S(n) 的数字根是 9 时,S(n) 能被 9 整除。当 n!≥6 时,S(n) 必定是 9 的倍数。
- 什么是数字根
分析d
易得 d % i = 0, i ∈ {1, 3, 5, 7, 9}可以被i整除.
通过分析,我们可以总结出以下规则:
- 1 一定能被整除。
- 3 在 n≥3 ∨ d=3 时一定能被整除。
- 7 在 n≥3 ∨ d=7时一定能被整除。
- 9 在 n≥6 ∨ (n≥3∧d=3) ∨ d=9时一定能被整除。
- 5 只能在 d=5 时能整除。
- 很明显时间复杂度是O(1).
代码实现
#include "bits/stdc++.h"
using namespace std;
void Solution() {
int n, d;
cin >> n >> d;
set<int> Ans = {1}; // 1 一定能整除
// 5 只能在 d = 5 时能整除
if (d == 5) Ans.insert(5);
// 3 当 n >= 3 时一定能整除
if (d % 3 == 0 || n >= 3) Ans.insert(3);
// 7 当 n >= 3 时一定能整除
if (d % 7 == 0 || n >= 3)
{
Ans.insert(7);
}
// 9 当 n >= 6 时一定能整除
if (d % 9 == 0 || n >= 6 || (n >= 3 && d % 3 == 0))
{
Ans.insert(9);
}
// 输出结果
for (auto& x : Ans) cout << x << ' ';
cout << '\n';
}
int main() {
int t;
cin >> t;
while (t--) {
Solution();
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现