作业介绍
循环嵌套(下)知识点总结
一、核心教学目标
- 掌握 质数判定 的基础逻辑与优化方法(利用平方根减少循环次数)
- 理解
sqrt()数学函数的功能、使用场景及头文件依赖 - 熟练运用循环嵌套解决 完全数罗列、质数口袋 等综合问题
- 深化循环嵌套中「变量重置」「提前退出」等编码技巧
二、重点知识点详解
(一)完全数罗列
1. 完全数定义
一个正整数的所有 真因子(不包括自身的正因子)之和,恰好等于它本身。
例:6 的真因子为 1、2、3,且 1+2+3=6,因此 6 是完全数。
2. 核心逻辑(循环嵌套)
- 外层循环:遍历 1~n 的所有候选数字(
i为当前待检查数字) - 内层循环:寻找当前数字
i的所有真因子,并累加因子和 - 关键注意:每次检查新数字前,需将因子和变量
sum重置为 0,避免累计上一个数字的结果
(二)质数判定
1. 质数定义
一个 大于 1 的正整数,除了 1 和它本身外,没有其他正因子(不能被其他数整除)。
⚠️ 注意:1 不是质数。
2. 基础判定逻辑(循环嵌套)
- 外层:针对输入数字
n进行判断 - 内层:用 2~n-1 的所有数字依次试除
n,若存在能整除的数,则n不是质数
3. 优化技巧(利用平方根)
- 核心原理:因子总是成对出现(如 12 的因子对:(1,12)、(2,6)、(3,4)),成对因子的“中点”是
sqrt(n),因此只需试除到sqrt(n)即可。 - 优化效果:将循环次数从
n-2减少到sqrt(n),大幅提升效率。
4. sqrt() 函数说明
- 功能:计算非负数的平方根(返回值为double类型,需配合整数类型使用)
- 头文件:必须包含
<cmath> - 示例:
sqrt(16)=4、sqrt(25)=5、sqrt(10)≈3.16
三、常见易错点整理
| 易错点 | 错误原因 | 正确做法 |
|---|---|---|
完全数罗列时 sum 未重置 |
累计上一个数字的因子和,导致结果错误 | sum 必须在外部循环内、内部循环前初始化(int sum=0;) |
| 质数判定未特判 1 | 误将 1 判定为质数 | 单独判断 n==1,直接输出 F |
sqrt() 未引入头文件 |
编译报错,函数无法识别 | 未使用万能头时需添加 #include <cmath> |
大数据时 i 类型溢出 |
n≤1e12 时,i 用 int 会溢出 |
循环变量 i 需声明为 long long 类型 |
| 质数判定未提前退出 | 找到因子后仍继续循环,浪费时间 | 发现因子后立即设 flag=false 并 break |
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 8
- 开始时间
- 2026-4-17 0:00
- 截止时间
- 2036-4-26 23:59
- 可延期
- 24 小时