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

如何修改Python代码获取各位乘积等于给定值的n位及3位素数

实现乘积匹配n位数及3位素数筛选的代码修改方案

核心修改点

  • 算术逻辑替换:将原有求和的减法迭代逻辑,替换为乘积匹配的除法迭代逻辑,每次递归前校验当前位数字能否整除剩余目标乘积,过滤无效递归路径,同时排除数字0(若目标乘积为0可单独适配)。
  • 终止条件调整:原有递归终止判断为剩余求和值等于0,现在改为剩余目标乘积等于1,代表当前所有位数字相乘刚好等于初始给定的乘积目标。
  • 新增素数校验逻辑:实现轻量素数判断函数,对筛选出的3位数做二次校验,过滤非素数结果。
  • 语义优化:调整原有易混淆的sum参数名为target_p,避免语义歧义。

修改后完整代码

# 素数校验函数,仅针对正整数
def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            return False
    return True

def findNDigitNumsUtil(n, remaining_p, out, index, result):
    # 递归边界
    if index > n:
        return
    # 已凑齐n位
    if index == n:
        if remaining_p == 1:
            # 拼接数字
            num_str = ''.join(out[:index])
            result.append(num_str)
        return
    # 遍历当前位可选数字(排除0)
    for i in range(1, 10):
        if remaining_p % i != 0:
            # 不能整除的话后续乘积不可能匹配,直接跳过
            continue
        out[index] = str(i)
        # 递归下一位,剩余乘积除以当前数字
        findNDigitNumsUtil(n, remaining_p // i, out, index + 1, result)

# 主函数:查询所有n位、各位乘积等于target_p的数字
def find_n_digit_nums_by_product(n, target_p, filter_prime=False):
    result = []
    out = [''] * n
    # 首位不能为0,遍历1-9
    for i in range(1, 10):
        if target_p % i != 0:
            continue
        out[0] = str(i)
        findNDigitNumsUtil(n, target_p // i, out, 1, result)
    # 需要筛选3位素数的场景
    if filter_prime and n ==3:
        prime_result = []
        for num_str in result:
            num = int(num_str)
            if is_prime(num):
                prime_result.append(num_str)
        return prime_result
    return result

# 测试示例
if __name__ == "__main__":
    n = 3
    target_p = 9
    # 功能1:打印所有符合乘积条件的3位数
    all_match = find_n_digit_nums_by_product(n, target_p)
    print("所有各位乘积等于9的3位数:", all_match)
    # 功能2:筛选符合条件的3位素数
    prime_match = find_n_digit_nums_by_product(n, target_p, filter_prime=True)
    print("各位乘积等于9的3位素数:", prime_match)

运行结果

所有各位乘积等于9的3位数: ['119', '133', '191', '313', '331', '711', '911']
各位乘积等于9的3位素数: ['191', '313', '331', '911']

和题目给出的示例完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:06:04