Python如何筛选三位数素数列表中各位数字乘积等于用户输入的元素
实现步骤
1 修复原有素数生成代码错误
原有素数生成代码存在两个问题:
- 内层
else缩进错误,当前对齐到if (num % i) == 0:分支,会误将大量非素数加入列表,正确应该和内层for循环对齐 - 你给出的
numere_prime结构多了一层嵌套,实际是一维列表
修正后的素数生成代码:
numere_prime = [] for num in range(100, 1000): if num > 1: for i in range(2, int(num**0.5) + 1): # 优化为遍历到平方根即可,大幅提升计算效率 if (num % i) == 0: break else: numere_prime.append(num)
2 实现乘积筛选功能
可以直接用累乘计算三位数各位的乘积,再和用户输入值对比筛选,完整实现代码如下:
# 获取用户输入,转换为整数 target = int(input("请输入目标乘积值:")) result = [] for elem in numere_prime: # 拆分三位数的各位数字 hundreds = elem // 100 tens = (elem // 10) % 10 units = elem % 10 # 计算各位乘积 product = hundreds * tens * units # 匹配目标值则加入结果 if product == target: result.append(elem) print(result)
如果需要沿用你已写的字符串拆分数字逻辑,也可以用循环累乘的方式:
target = int(input("请输入目标乘积值:")) result = [] for elem in numere_prime: digits = [int(x) for x in str(elem)] product = 1 for n in digits: product *= n if product == target: result.append(elem) print(result)
3 测试效果
当输入值为9时,运行代码输出结果为[191, 313, 331, 911],和你给出的示例完全一致。
内容的提问来源于stack exchange,提问作者Vadim Paduraru
相关产品推荐
相关产品推荐

