作业介绍

循环嵌套(下)知识点总结

一、核心教学目标

  1. 掌握 质数判定 的基础逻辑与优化方法(利用平方根减少循环次数)
  2. 理解 sqrt() 数学函数的功能、使用场景及头文件依赖
  3. 熟练运用循环嵌套解决 完全数罗列质数口袋 等综合问题
  4. 深化循环嵌套中「变量重置」「提前退出」等编码技巧

二、重点知识点详解

(一)完全数罗列

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)=4sqrt(25)=5sqrt(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=falsebreak

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
8
开始时间
2026-4-17 0:00
截止时间
2036-4-26 23:59
可延期
24 小时