Python编程题:通过排列组合从字符串提取小于999的素数
函数实现方案
核心逻辑
- 仅生成长度为1、2、3位的数字排列,天然满足数值小于1000的筛选要求
- 用集合存储结果,自动去重,避免字符串内重复数字、前导零排列导致的重复数值
- 实现轻量素数判断逻辑,过滤非素数结果
- 最终返回升序排列的整数列表
素数判断规则
- 小于2的整数不是素数
- 等于2的整数是素数
- 大于2的偶数不是素数
- 对大于2的奇数,遍历从3到其平方根的所有奇数做取模校验,存在可整除因子则不是素数,否则为素数
完整可运行代码
from itertools import permutations def is_prime(n): if n < 2: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(n ** 0.5) + 1, 2): if n % i == 0: return False return True def primenumber_from_string(string1): prime_result = set() # 遍历1-3位长度的所有排列 for arr_len in range(1, 4): for perm_item in permutations(string1, arr_len): current_num = int(''.join(perm_item)) if is_prime(current_num): prime_result.add(current_num) return sorted(list(prime_result)) if __name__ == '__main__': # 题目示例测试 print(primenumber_from_string("23167")) # 给定测试用例 print(primenumber_from_string("8487934"))
效果说明
针对题目给出的示例输入
"23167",返回结果会包含示例列举的2、3、7、23、31、167,长度超过3位的排列(如原字符串本身23167)会被自动排除,不会进入结果集。
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

