Python实现:输出给定自然数的所有两自然数乘积对
解决找自然数因数对的问题
嘿,作为编程新手遇到这种小bug太正常啦!我来帮你搞定这个找因数对的函数~
问题根源分析
你说输出缺少最后一行,大概率是循环范围没设置对——比如循环只到了目标数平方根的整数部分,没包含这个整数本身,导致漏掉了最后一组因数对(比如完全平方数的(√n, √n),或者非平方数的最后一组正向/反向对)。
正确实现方案(以Python为例)
def find_factor_pairs(n): # 先做输入合法性校验,确保是正自然数 if not isinstance(n, int) or n <= 0: print("请输入正自然数哦!") return factor_pairs = [] # 循环范围要包含平方根的整数部分,所以要+1 for i in range(1, int(n**0.5) + 1): if n % i == 0: # 找到一组因数对:i 和 n//i factor_pairs.append((i, n // i)) # 如果两个因数不相等,添加反向的对(如果需要有序对的话) if i != n // i: factor_pairs.append((n // i, i)) # 逐个输出所有因数对 for pair in factor_pairs: print(pair)
关键细节解释
- 输入校验:先判断输入是不是正整数,避免非法输入导致的报错
- 循环范围的
+1:这是解决你“缺最后一行”的核心!比如输入4,它的平方根是2,如果循环只到int(4**0.5)也就是2,但range(1,2)只会遍历1,会漏掉(2,2)这组;加+1后变成range(1,3),就能遍历1和2,不会遗漏。 - 因数对的双向添加:如果需要所有有序对(比如
(1,6)和(6,1)都要),就添加反向对;如果只需要无序对,删掉if i != n//i这段代码就行。 - 遍历输出:最后把收集到的所有因数对逐个打印,就能保证每一组都不会漏掉啦!
示例测试
比如输入6,会输出:
(1, 6) (6, 1) (2, 3) (3, 2)
输入9,会输出:
(1, 9) (9, 1) (3, 3)
内容的提问来源于stack exchange,提问作者Hrabě
相关产品推荐
相关产品推荐

