1. 题目背景与需求解析
《B3953 [GESP202403 一级] 找因数》这道编程题目来自青少年编程能力等级考试(GESP)的一级认证题库。作为面向初学者的编程基础题型,它考察的是考生对循环结构和条件判断的基础应用能力。
1.1 题目核心要求
题目要求编写一个程序,接收用户输入的一个正整数n,然后输出这个数的所有正整数因数(包括1和它本身)。因数是指能整除该数的整数,例如:
- 输入6,输出应为1 2 3 6
- 输入13,输出应为1 13
1.2 考察能力维度
这道题目主要测试三个方面的编程基础:
- 输入输出处理:如何接收用户输入并格式化输出结果
- 循环结构运用:通过循环遍历可能的因数
- 条件判断逻辑:验证某个数是否确实是因数
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础解法实现
2.1 算法思路
最直接的解法是使用暴力枚举法:
- 接收输入的正整数n
- 从1到n依次检查每个数i是否能整除n
- 如果能整除(n%i==0),则i是n的因数
2.2 Python实现代码
python复制n = int(input())
for i in range(1, n+1):
if n % i == 0:
print(i, end=' ')
2.3 代码解析
input()获取用户输入,int()将其转换为整数range(1, n+1)生成从1到n的整数序列n % i == 0判断i是否能整除nend=' '让输出数字以空格分隔而不是换行
3. 算法优化方案
3.1 优化思路
基础解法的时间复杂度是O(n),当n很大时效率较低。我们可以利用数学性质进行优化:
- 因数总是成对出现(如6的因数:1和6,2和3)
- 只需要检查到√n即可找出所有因数对
3.2 优化后代码
python复制n = int(input())
factors = set()
for i in range(1, int(n**0.5)+1):
if n % i == 0:
factors.add(i)
factors.add(n//i)
for f in sor
