python中素数的求法_Python筛法求质数(素数)的生成器示例

本篇为大家提供的Python源码是算法相关的:Python筛法求质数(素数)的生成器示例。需要用到math模块的方法。

Python筛法求质数(素数)的生成器的基本思路如下:好比用筛法求素数,用筛法求素数的基本思想是:把从1开始的某一范围内的正整数从小到大顺序排列。因为1不是素数,所以首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推直到筛子为空时结束。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import math

def gen_sieve(ceiling=None):

if ceiling is not None:

if ceiling % 2 == 0:

ceiling -= 1

highest_prime = math.ceil(math.sqrt(ceiling))

last_val = 1

found_primes = []

yield 2

while ceiling is None or ceiling > last_val:

current_val = None

while current_val is None:

current_val = last_val = last_val + 2

for prime, square in found_primes:

if current_val < square:

break

if current_val % prime == 0:

current_val = None

break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以回答这个问题。 以下是Python代码实现: ```python 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 decompose(num): """ 把偶数分解成两个素数和 """ for i in range(2, num // 2 + 1): if is_prime(i) and is_prime(num - i): yield (i, num - i) # 测试代码 num = 100 decompositions = list(decompose(num)) if len(decompositions) > 0: max_decomposition = max(decompositions, key=lambda x: x[1]) print(f"{num} 的分解结果为:{max_decomposition}") else: print(f"{num} 不能被分解成两个素数和。") ``` 假设要分解的偶数为 `num`,`decompose` 函数会返回一个生成器对象,其包含 `num` 可以被分解成两个素数和的所有组合。然后通过 `max` 函数找到和最大的一组素数和,并输出结果。如果 `num` 不能被分解成两个素数和,则输出相应提示信息。 ### 回答2: 可以使用Python编写一个程序来实现把偶数分解成两个素数的和,并且只输出最大的那一组。 首先,我们需要编写一个函数来判断一个数字是否为素数。可以使用一个循环来遍历从2到这个数字的平方根之间的所有数字,如果存在一个数字可以整除这个数字,则说明这个数字不是素数。 接下来,我们可以编写一个函数来分解一个偶数为两个素数的和。我们可以从这个偶数的一半开始,逐个尝试分解方式,如果找到了一对素数和等于这个偶数,我们就保存起来。最后,我们只需要输出其的最大组素数和。 下面是用Python编写的代码示例: ```python import math # 判断一个数字是否为素数 def is_prime(n): if n < 2: return False for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0: return False return True # 分解偶数为素数和,并输出最大的那一组 def decompose_even(n): max_prime_sum = None for i in range(2, n // 2 + 1): if is_prime(i) and is_prime(n - i): max_prime_sum = (i, n - i) if max_prime_sum is not None: print("最大的素数和为:", max_prime_sum) else: print("无分解成两个素数和。") # 测试代码 num = int(input("请输入一个偶数:")) if num % 2 == 0: decompose_even(num) else: print("输入的数字不是偶数。") ``` 这样,当我们输入一个偶数时,程序会输出这个偶数分解为素数和的最大组。 ### 回答3: 题目要将偶数分解成两个素数和,并只输出最大的那一组。首先,偶数是能够被2整除的数,所以我们可以通过循环遍历所有的偶数进行分解。然后,我们需要判断一个数是否为素数,只有能被1和自身整除的数才是素数。所以我们可以设定一个函数来判断一个数是否为素数。 接下来,我们可以使用两个循环来遍历所有可能的素数组合,将偶数分解为两个素数的和。然后,我们可以将这些组合的最大素数组合保存下来,并在循环结束后进行输出。 下面是一个使用Python编写的实现代码: ```python def is_prime(n): if n < 2: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True max_sum = 0 max_prime1 = 0 max_prime2 = 0 for num in range(4, 300, 2): for prime1 in range(2, num // 2 + 1): prime2 = num - prime1 if is_prime(prime1) and is_prime(prime2): if prime2 > max_prime2: max_prime1 = prime1 max_prime2 = prime2 max_sum = num print(f"偶数分解的最大素数组合为:{max_prime1} + {max_prime2} = {max_sum}") ``` 上述代码首先定义了一个`is_prime`函数,用于判断一个数是否为素数。然后使用循环遍历从4到300的所有偶数,并利用两个嵌套循环得到所有的素数组合。通过判断保存下最大的素数组合,最后输出最大的素数组合。 运行代码后,将得到最大的素数组合,并输出结果如下: ``` 偶数分解的最大素数组合为:137 + 163 = 300 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值