You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用循环和递归如何统计c在a、b区间内的约数个数

问题描述

已知a、b、c三个数均不为0,需要找出c的所有取值在a到b区间(包含a、b两端)的约数,并统计符合条件的约数数量。原实现采用递归逻辑,但要求不能使用递归也不能使用循环,需要给出符合要求的实现。

原递归实现代码如下:

a,b,c=5,25,10
def divisors(a,b,c):
    def divs(a, b, c, l=[], d=1):
        if (c % d == 0) & (min(a, b) <= d <= max(a, b)):
            l.append(d)
        if d == c:
            return None
        divs(a, b, c, l, d + 1)
        return l
    if a!=0 and b!=0 and c!=0:
        return len(divs(a,b,c))
    else:
        print("A,B,C Ar unda iyos 0")
        return False

print(divisors(a,b,c))
实现方案

可以通过Python内置的filter函数完成筛选,全程不需要手动编写for/while循环,也不需要递归逻辑:

a,b,c = 5,25,10
def divisors(a,b,c):
    if a == 0 or b == 0 or c == 0:
        print("A,B,C Ar unda iyos 0")
        return False
    low = min(a,b)
    high = max(a,b)
    # 内置filter完成条件筛选,底层迭代由解释器封装,无手动循环/递归
    valid_divisors = filter(lambda x: c % x == 0 and low <= x <= high, range(1, c+1))
    return len(list(valid_divisors))

print(divisors(a,b,c))

逻辑说明

  • 保留了原代码的参数非0校验逻辑,输出提示和返回值和原实现完全一致
  • 先对a、b取最大最小值,适配a大于b的场景
  • range(1, c+1)生成1到c的所有整数,通过filter筛选同时满足「是c的约数」「落在目标区间」两个条件的数值,最后转换为列表取长度,就是符合要求的约数个数
  • 示例输入a=5、b=25、c=10运行后输出为2,和原递归代码结果完全一致,对应符合条件的约数为5、10两个

内容的提问来源于stack exchange,提问作者Hel Muth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:45:03