python中用filter求素数

#用filter求素数

#生成器,生成一个无限序列
def _odd_iter():
    n=1
    while True:
        n=n+2
        yield n
#筛选函数
def _not_divisible(n):
    return lambda x:x%n>0
    
#生成器,不断返回下一个素数
def primes():
    yield 2
    it = _odd_iter()#初始序列
    while True:
        n=next(it)#返回序列的第一个数
        yield n
        it = filter(_not_divisible(n),it)

#由于primes()也是一个无限序列,所以调用时需要设置一个退出循环的条件

#打印1000以内的素数:
for n in primes():
    if n < 1000:
        print(n)
    else:
        break

 

### 使用 Python 的 `for` 循环实现素数计算 以下是基于提供的引用内容以及专业知识编写的代码示例,用于通过 `for` 循环计算素数。 #### 方法一:单个数字的素数判断 可以使用以下函数来判断某个特定的正整数是否为素数: ```python def is_prime(num): """判断一个数是否为素数""" if num < 2 or (num > 2 and num % 2 == 0): # 排除小于2的数和偶数 return False for i in range(3, int(num ** 0.5) + 1, 2): # 只需检查到平方根即可 if num % i == 0: return False return True ``` 此方法利用了优化逻辑,仅对奇数进行迭代,并且只需遍历至目标数值的平方根范围[^2]。 --- #### 方法二:批量生成指定区间内的所有素数 可以通过嵌套 `for` 循环的方式,在一定范围内筛选出所有的素数。例如,找到 1 至 100 范围内的所有素数: ```python primes = [] for num in range(1, 101): # 遍历从1到100的所有数字 if num > 1: # 素数定义大于1 for i in range(2, num): # 检查是否有其他因数 if (num % i) == 0: # 如果存在因数,则不是素数 break else: # 若无任何因数则加入素数列表 primes.append(num) print(primes) ``` 上述代码会输出 `[2, 3, 5, 7, 11, ..., 97]` 表示 1 到 100 中的所有素数[^3]。 注意:这种方法效率较低,因为它会对每一个候选数逐一尝试其可能的因子。更高效的算法可以在外层循环中减少不必要的运算次数。 --- #### 方法三:结合 `for-else` 结构提取素数 另一种简洁优雅的做法是运用 Python 特有的 `for-else` 构造。当 `for` 循环正常完成而未遇到中途退出 (`break`) 时,才会触发后续的 `else` 块执行动作。这特别适合用来处理像寻找素数这样的场景。 假设有一个数组包含若干随机整数,我们希望从中挑选出全部素数并将它们相加得到总和: ```python numbers = [3, 1, 12, 5, 14, 8, 7, 2, 5, 3, 2, 6, 7, 2, 3, 8, 5] prime_sum = [] for n in numbers: if n > 1: for divisor in range(2, n // 2 + 1): # 测试能否被较小于一半大小的任意自然数所整除 if n % divisor == 0: break else: # 此处表示没有任何有效divisor能够成功整除n的情况发生 prime_sum.append(n) print(f'Prime Numbers Found:{prime_sum}') print(f'Sum of Primes={sum(prime_sum)}') ``` 这里展示了如何利用简单的控制流语句快速定位集合里的质元素并累加起来[^4]。 --- ### 性能考虑 尽管以上三种方式均能达到目的,但在实际应用过程中应优先选用性能较优者。通常推荐采用第一种方案——单独封装成函数形式调用,因为这样不仅易于维护而且运行速度更快。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值