news 2026/9/5 2:46:15

洛谷 B4007 / B4411 / B4035 计数、优美的数字与美丽数字——余数与数学之美

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 B4007 / B4411 / B4035 计数、优美的数字与美丽数字——余数与数学之美

洛谷 B4007 / B4411 / B4035 计数、优美的数字与美丽数字——余数与数学之美

📌 摘要

B4007 统计数字 k 在 1 到 n 中出现的次数,B4411 统计所有位都相同的数的个数,B4035 统计是 9 的倍数但不是 8 的倍数的数的个数。三道题共享两个核心操作:逐位拆解%10取个位、/10去个位)和取余判断%k == 0判断整除)。很多同学在做这些题时第一次真正理解了余数——当被除数小于除数时,余数等于被除数本身,而不是 0。三道题的名称——计数、优美、美丽——都在邀请我们从人文角度欣赏数学。本文从伪代码题解出发,延伸到余数的数学本质、9 的数位和整除规则、重码数(Repdigit)的数论性质,以及从毕达哥拉斯到 Erdős 的"数学美"传统。

题目链接:B4007 计数 | B4411 优美的数字 | B4035 美丽数字

📚 目录

  • 📝 前言

  • 🔍 三道题在考什么

  • 🔢 B4007:计数

    • 💡 思路

    • 📝 伪代码

    • 🎯 关键点

  • ✨ B4411:优美的数字

    • 💡 思路

    • 📝 伪代码

    • 🎯 关键点

  • 💎 B4035:美丽数字

    • 💡 思路

    • 📝 伪代码

    • 🎯 关键点

  • ⚖️ 三题对比

  • ⚠️ 注意事项

  • 🌳 延伸:数学之美——从余数到数论

    • 🔢 余数的本质:被除数小于除数时

    • ✨ 9 的魔力:数位和与整除规则

    • 🔄 重码数(Repdigit):所有位相同的数

    • 🎭 数学美:从毕达哥拉斯到 Erdős

    • 🎪 三道题的数学内核

  • 📚 延伸阅读文献


📝 前言

这篇题解没有源代码,只有伪代码。

作为一名信奥教练,我不提倡复制粘贴。我见过太多学生搜到题解、复制、粘贴、提交、AC——代码跑通了,脑子没跑通。下次遇到变体题,还是不会。

伪代码剥掉了语言的壳,只留算法的骨架。你看不到#include,看不到cincout,看不到那些让你以为"我会了"的语法细节。你能看到的只有:这一步做什么、下一步做什么、为什么这么做。

如果你是路过的友友,已经在这道题上挣扎了很久——先去喝杯水,回来重新看看自己卡在哪一步。是没读懂题意?是思路方向偏了?还是代码有 bug 但逻辑其实对?大多数时候不是不会,是走偏了。偏了不可怕,可怕的是偏了之后直接放弃,去抄一份能 AC 的代码。抄完你以为你懂了,其实你只是搬了别人的结论。

除非你时间真的紧张——比赛临近、作业要交——那种情况先 AC 再说,能理解。但平时练习,给自己一点耐心。先自己想、自己写、自己调,跑不过了再来看伪代码:你的思路和这里差在哪一步。那一步,就是你真正学到的东西。


🔍 三道题在考什么

三道题都是"对数字做某种判断然后计数",但判断的依据截然不同:


B4007 计数B4411 优美的数字B4035 美丽数字
判断什么某个数字 k 出现了几次所有位是否都相同是 9 的倍数但不是 8 的倍数
核心操作逐位拆解 + 比较逐位拆解 + 一致性检查取余判断整除性
数学概念数字频率重码数(Repdigit)整除与互斥条件
难度入门入门入门

B4007 把每个数的各位拆开,数某个数字出现了几次。B4411 把每个数的各位拆开,检查它们是否全相同。B4035 不拆数字,直接用取余判断整除性。前两题是"逐位操作",第三题是"整体取余"。

三道题的名称——计数、优美、美丽——都不约而同地用了审美词汇。这不偶然:数学家和数学教育者一直认为,数学的美感应该被体验,而不仅仅是被计算


🔢 B4007:计数

💡 B4007 思路

遍历 1 到 n 的每个数,对每个数用%10取个位、/10去个位,逐位检查是否等于 k,累加计数。

📝 B4007 伪代码

读取 n, k 计数 = 0 对 i = 1 到 n: temp = i 当 temp > 0: 如果 temp % 10 == k: // 取个位 计数++ temp = temp / 10 // 去掉个位 输出 计数

🎯 B4007 关键点

逐位拆解。%10取个位,/10去个位,循环直到数为 0。这是数字位操作的基础。

用样例 n=25, k=2 追踪:

各位含 2 的个数累计
1100
2211
3~1101
121, 212
13~1902
202, 013
212, 114
222, 226
232, 317
242, 418
252, 519

输出:9

22 贡献了 2 次。数字 22 的十位和个位都是 2,所以%10检查个位(==2,计数++),/10后变成 2,再%10检查(==2,计数++),总共 2 次。逐位拆解自然地处理了"同一个数中多次出现"的情况。


✨ B4411:优美的数字

💡 B4411 思路

遍历 1 到 n 的每个数,取个位作为"参考数字",然后逐位检查所有位是否都等于参考数字。如果全部相同,就是"优美的"。

代码取i % 10(个位)作为参考single_num,然后从个位开始逐位检查。如果任何一位不等于single_num,立刻break。如果temp == 0(所有位都检查过且都相同),则计数。

📝 B4411 伪代码

读取 n 总数 = 0 对 i = 1 到 n: temp = i 参考数字 = i % 10 // 取个位作为参考 当 temp > 0: 当前位 = temp % 10 如果 当前位 != 参考数字: 跳出循环 // 发现不同,不优美 temp = temp / 10 如果 temp == 0: // 所有位都检查过,全相同 总数++ 输出 总数

🎯 B4411 关键点

"全相同"的判断技巧。取一个位作为参考,逐位比对。如果中途发现不同就 break,temp 不为 0;如果全部相同,循环正常结束,temp 变为 0。用temp == 0作为"全相同"的标志。

用样例 n=6 追踪:

各位参考数字全相同?累计
1111
2222
3333
4444
5555
6666

输出:6。1-6 都是一位数,自然"全相同"。

n=2025 的情况。1-9 是 9 个,11-99 是 9 个,111-999 是 9 个,1111 是 1 个(2222 > 2025 不算)。9+9+9+1=28

这些数叫什么?所有位都相同的数,在数论中叫重码数(Repdigit,Repeated Digit)(Repdigit — Wikipedia)。1, 2, …, 9, 11, 22, …, 99, 111, 222, …, 999, 1111, … — 每个位都是同一个数字的重复。延伸部分会展开讲。


💎 B4035:美丽数字

💡 B4035 思路

读入 n 个数,对每个数检查两个条件:是 9 的倍数(%9 == 0)且不是 8 的倍数(%8 != 0)。两个条件都满足才算"美丽"。

📝 B4035 伪代码

读取 n 美丽数计数 = 0 对 i = 1 到 n: 读取 temp 如果 temp % 9 == 0 且 temp % 8 != 0: 美丽数计数++ 输出 美丽数计数

🎯 B4035 关键点

取余判断整除。a % b == 0意味着 a 能被 b 整除。a % b != 0意味着不能。两个条件用"且"连接——必须同时满足。

用样例[1, 9, 72]追踪:

%9 == 0?%8 != 0?美丽?
11%9=1≠0 → 否
99%9=0 → 是9%8=1≠0 → 是
7272%9=0 → 是72%8=0 → 否

输出:1

72 为什么不美丽?72 是 9 的倍数(8×9=72),但也是 8 的倍数(9×8=72)。题目要求"是 9 的倍数但不是8 的倍数"——两个条件缺一不可。

"被除数 < 除数"时的余数。很多同学在这里第一次真正理解了余数。比如 1 % 8 等于多少?直觉上"8 除不尽 1",但余数不是 0——是 1。因为 1 ÷ 8 = 0 余 1。当被除数小于除数时,商为 0,余数等于被除数本身。这个看似简单的概念,是整除判断的基础。


⚖️ 三题对比


B4007 计数B4411 优美的数字B4035 美丽数字
操作对象数字的一位数字的每一位整个数字
核心操作%10+/10逐位拆解%10取参考 + 逐位比对%9%8整除判断
计数条件某位 == k所有位 == 参考位是 9 倍数且非 8 倍数
数学概念数字频率重码数(Repdigit)整除性与互斥条件
"美"在哪数字出现在多少个数里所有位和谐统一恰好满足双重条件
复杂度O(n × d)O(n × d)O(n)

B4007 和 B4411 都在"逐位拆解"——把一个多位数拆成一位一位的。B4035 不拆,直接对整个数取余。前两题是"微观"操作(看每一位),第三题是"宏观"操作(看整个数)。


⚠️ 注意事项

  • 余数基础:被除数 < 除数时余数 = 被除数:这是很多同学的第一个"原来如此"时刻。1 % 8 = 1(不是 0),3 % 9 = 3(不是 0),7 % 8 = 7(不是 0)。因为 1 ÷ 8 = 0 余 1。a % b == 0只有在 a 是 b 的倍数(或 a==0)时才成立。当 a < b 且 a > 0 时,a % b = a ≠ 0,所以 a 不是 b 的倍数——这是正确的。

  • B4007 的 22 贡献两次:逐位拆解会自然地把 22 拆成两个 2,各检查一次。不需要特殊处理"同一个数中多次出现"的情况。

  • B4411 的temp == 0判断:循环正常结束(所有位都相同)时 temp 变为 0;中途 break(发现不同)时 temp 不为 0。用temp == 0作为"全相同"的标志是一种简洁的写法,但可读性见仁见智——更直观的写法是单独设一个all_same布尔标志。

  • B4035 的"且"逻辑%9 == 0 && %8 != 0两个条件必须同时满足。如果用||(或),72 也会被判为美丽(因为 72%9==0 成立),这是错的。

  • B4035 的数据范围:n, a_i ≤ 10⁵,O(n) 遍历即可,无需优化。


🌳 延伸:数学之美——从余数到数论

你说这三道题的名称——计数、优美、美丽——“似乎都在让大家从人文角度去欣赏数学的魅力”。没错,而且这个传统从 2500 年前就开始了。

🔢 余数的本质:被除数小于除数时

很多同学做 B4035 时第一次碰到了这个问题:1 % 8等于多少?

直觉说"8 除不尽 1",有人猜 0(除不尽就是 0 余数),有人猜 -7(差 7 才到 8)。但答案是1

因为除法的定义是:被除数 = 商 × 除数 + 余数,其中 0 ≤ 余数 < 除数。

1 = 0 × 8 + 1 → 商=0, 余数=1 3 = 0 × 9 + 3 → 商=0, 余数=3 7 = 0 × 8 + 7 → 商=0, 余数=7

当被除数 < 除数时,商为 0,余数 = 被除数本身。这不是特殊规则,是除法定义的直接推论。

表达式余数含义
17 % 53217 里有 3 个 5,剩 2
8 % 8108 里有 1 个 5,不剩 → 整除
3 % 8033 里没有 8,剩 3
1 % 9011 里没有 9,剩 1

余数 ≠ 0 意味着"不整除"。当 a < b 且 a > 0 时,a % b = a ≠ 0,所以 a 不是 b 的倍数。这是 B4035 中%8 != 0判断的逻辑基础。

这个概念在数学中叫模运算(Modular Arithmetic),是数论的基础工具。高斯在 1801 年的《算术研究》中系统化地建立了模运算理论,从此它成了现代密码学(RSA)、计算机科学(哈希函数)、竞争编程(数论题)的共同语言。

✨ 9 的魔力:数位和与整除规则

B4035 判断"9 的倍数",B4007 和 B4411 都在"逐位拆解数字"。这两件事之间有一个深刻的数学联系:

一个数能被 9 整除,当且仅当它的各位数字之和能被 9 整除。(The Magic of Numbers — Utah Math Circle)(20 Cool Math Facts — CueMath)

为什么?因为10 ≡ 1 (mod 9)——10 除以 9 余 1。所以 10 的任何次方除以 9 都余 1:

10 = 9×1 + 1 → 10 ≡ 1 (mod 9) 100 = 9×11 + 1 → 100 ≡ 1 (mod 9) 1000 = 9×111 + 1 → 1000 ≡ 1 (mod 9)

所以一个数比如 576 = 5×100 + 7×10 + 6×1,对 9 取余:

576 mod 9 = (5×1 + 7×1 + 6×1) mod 9 = (5+7+6) mod 9 = 18 mod 9 = 0

576 的各位数字之和 5+7+6=18,18 是 9 的倍数,所以 576 是 9 的倍数。(Base-b Digit Sum Function)(特殊数学性质 — CSDN)

这意味着:B4007 的"逐位拆解"和B4035 的"取余判断整除"在数学上是连通的——逐位拆解数字求和,就等价于对 9 取余。你在 B4007 里数 2 出现了几次,和判断一个数是不是 9 的倍数,用的是同一套"位值"数学。

整除规则原理和三道题的关系
能被 9 整除 ↔ 各位之和能被 9 整除10 ≡ 1 (mod 9)B4035 判断 9 的倍数
能被 3 整除 ↔ 各位之和能被 3 整除10 ≡ 1 (mod 3)同理
能被 2 整除 ↔ 末位是偶数10 ≡ 0 (mod 2)
能被 5 整除 ↔ 末位是 0 或 510 ≡ 0 (mod 5)

9 的整除规则之所以特别,是因为 10 ≡ 1 (mod 9)——每一位的"权重"都是 1,所以各位直接相加就行。这就是为什么 9 在整除规则中独树一帜。

🔄 重码数(Repdigit):所有位相同的数

B4411 的"优美数字"——所有位都相同的数——在数论中有一个正式名字:重码数(Repdigit,Repeated Digit)(Repdigit — Wikipedia)。

重码数的序列是:1, 2, 3, …, 9, 11, 22, 33, …, 99, 111, 222, …, 999, 1111, …

一个 d 位的重码数可以写成:

R(d, r) = r × (10^d - 1) / 9 其中 d 是位数,r 是重复的数字(1-9)

比如 222 = 2 × (10³ - 1)/9 = 2 × 999/9 = 2 × 111 = 222。

重码数有一些有趣的数论性质(Repdigit and Repunit — Research):

性质例子说明
全由 1 组成的重码数叫重一数(Repunit)1, 11, 111, 1111, …“Repeated Unit”,1966 年命名(Repunit — Wikipedia)
重码数要为质数,必须是重一数且位数为质数11 是质数(2 位,2 是质数)22 = 2×11 不是质数
不是所有质数位的重一数都是质数111 = 3×37 不是质数(3 位,3 是质数但 111 不质)位数为质数是必要非充分条件
重码数的数字和 = 位数 × 重复数字222 的数字和 = 3×2 = 6和 9 的整除规则联动

B4411 答案的数学公式。不超过 n 的重码数个数可以算出来:对每个位数 d(1 到 n 的位数),每个重复数字 r(1 到 9),如果 R(d,r) ≤ n 就算一个。n=2025 时:1 位 9 个 + 2 位 9 个 + 3 位 9 个 + 4 位只有 1111 ≤ 2025 一个 =28。你不用遍历 1 到 2025 每个数,直接枚举位数和重复数字就能算出来——从 O(n) 优化到 O(9 × log n)。

🎭 数学美:从毕达哥拉斯到 Erdős

三道题的名称——计数、优美、美丽——用了审美词汇。这不是偶然。数学家和数学教育者一直相信,数学的美感应该被体验,而不仅仅是被计算。

人物时代名言/观点
毕达哥拉斯公元前 500 年“万物皆数”(All is number)——第一个把数学和美等同的人
柏拉图公元前 400 年“不懂几何者不得入内”——数学是理解真理的前提
欧拉18 世纪e^(iπ)+1=0——被公认为"最美丽的数学公式"
哈代20 世纪“数学家的模式如画家或诗人一样,必须是美的”(A Mathematician’s Apology)
Erdős20 世纪“上帝有一本证明之书,里面收录了每个定理最优美的证明”

哈代在《一个数学家的辩白》中写道:" Beauty is the first test: there is no permanent place in the world for ugly mathematics."(美是第一道考验:丑陋的数学在世界上没有永久的位置。)——他说的不只是大定理,也包括你今天写的每一行代码里的数学逻辑。

B4411 的"优美数字"——所有位都相同——是一种对称美。B4035 的"美丽数字"——恰好满足两个条件——是一种平衡美。B4007 的"计数"——数字在序列中出现多少次——是一种规律美。三种美,恰好对应数学审美的三个维度。

🎪 三道题的数学内核

表面是数学本质是美在哪
B4007 计数数数字 k 出现几次位值制——10^k 的权重规律美:数字在序列中的频率
B4411 优美的数字所有位是否相同重码数——r×(10^d-1)/9对称美:重复与统一
B4035 美丽数字是 9 倍数非 8 倍数模运算——10 ≡ 1 (mod 9)平衡美:双重条件的精确交集

三道题共享的数学基础是位值制(Place Value System)——一个数的值取决于每个数字在哪个位置。B4007 利用位值制把数字拆开,B4411 利用位值制检查一致性,B4035 的 9 整除规则本身就是位值制的数学推论。

位值制是人类发明的最伟大的数学技术之一。没有它,我们还在用罗马数字做加减法——MCMXCIV + CCLXVII = ? 有了位值制,同样的运算是 1994 + 267 = 2261——逐位计算,进位即可。你在三道题里用的%10/10,就是在利用位值制——每一位的权重是 10 的幂。


📚 延伸阅读文献

论文
  1. A. H. Beiler.Recreations in the Theory of Numbers. Dover, 1966. (Repunit — Wikipedia) —— "Repunit"一词的起源,重码数与重一数的数论入门。
  2. P. Patel et al.Patterns obtained from digit and iterative digit sums of Palindromic, Repdigit and Repunit numbers. Global Journal of Pure and Applied Mathematics, 2016. (Research Publication) —— 重码数与重一数的数字和模式研究。
  3. C. F. Gauss.Disquisitiones Arithmeticae(算术研究). 1801. —— 模运算理论的奠基之作,数论的经典。
在线资源
  1. 洛谷.B4007 [GESP202406 二级] 计数. https://www.luogu.com.cn/problem/B4007
  2. 洛谷.B4411 [GESP202509 二级] 优美的数字. https://www.luogu.com.cn/problem/B4411
  3. 洛谷.B4035 [GESP202409 一级] 美丽数字. https://www.luogu.com.cn/problem/B4035
  4. The Magic of Numbers — Utah Math Circle. https://www2.math.utah.edu/mathcircle/notes/magicnumbers.pdf —— 9 的整除规则证明,含位值制与模运算。
  5. 20 Cool Math Facts That Will Change the Way You See Numbers — CueMath. https://www.cuemath.com/blog/20-cool-math-facts/ —— 数学趣味知识,含 9 的数字和自检。
  6. The Base-b Digit Sum Function — Jupiter Science. https://jupiterscience.com/… —— 位值制与整除规则的数学原理。
  7. Repdigit — HandWiki. (Wikipedia) —— 重码数百科条目,含数论性质。
  8. Repunit — Wikipedia. (Wikipedia) —— 重一数百科条目,含质数判定。
  9. 特殊的数学性质 — CSDN. https://blog.csdn.net/ke_wu/article/details/144300038 —— 数模 9 等于各位数之和模 9 的中文解释。
推荐教材
  • G. H. Hardy.A Mathematician’s Apology. Cambridge University Press, 1940. —— 哈代关于数学美的经典论述,“丑陋的数学没有永久位置”。

  • I. Niven.Numbers: Rational and Irrational. MAA, 1961. —— 数论入门经典,含整除性与模运算。

  • A. H. Beiler.Recreations in the Theory of Numbers. Dover, 1966. —— 数论趣味读物,重码数与重一数的全面介绍。

  • M. Du Sautoy.The Music of the Primes. HarperCollins, 2003. —— 从质数分布到数学美,通俗数学读物。


本文标签:#算法 #数论 #余数 #整除规则 #重码数 #位值制 #数学美 #洛谷题解 #信奥 #C++ #入门

本文首发于CSDN,作者:HugoStudio_SWAN

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 2:45:09

低功耗蓝牙BLE透传模块E104-BT02实战:从硬件设计到驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 2:45:07

喜迎中秋+国庆共10天假期——表达我的开心-html表达

伏案耕书岁月长&#xff0c;少年逐梦自昂扬。 心随墨海寻真趣&#xff0c;志向书山揽旭光 。 暂得佳期舒倦眼&#xff0c;仍怀勤学赴新章。 双节休沐从容度&#xff0c;收假归来意气扬。通过豆包创建的完成方法步骤&#xff1a;1. 提示词喜迎中秋 国庆共 10 天假期 —— 表达我…

作者头像 李华
网站建设 2026/9/5 2:44:17

SpringBoot电商秒杀系统:高并发库存扣减与防超卖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 2:40:38

基于车辆物联网平台的应急电源车远程监控系统

一、项目背景某应急电力保障服务公司承担着城市供电应急保障、重大活动保电及自然灾害抢险救援等任务&#xff0c;旗下管理应急电源车超过五十台&#xff0c;分布在不同区域驻点。当前主要依靠现场巡检和人工上报方式掌握车辆及设备状态&#xff0c;存在信息滞后、巡检盲区多、…

作者头像 李华
网站建设 2026/9/5 2:39:25

AI研发节奏下的工程稳健性:从模型部署到生产环境实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 2:34:23

开发者技术成长:从恐惧到自信的心理学实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华