使用 Python 查找具有给定算术平均值的一对素数

Finding a pair of prime numbers with a given arithmetic average using Python

我必须创建一个函数 f(n),它将 return 一对素数的算术平均值 n。例如 f(10) = [3, 17], f(3) = [3, 3].

到目前为止,我在同时处理两个质数时遇到问题:

def f(n):
    for i in range(2,a):
        for k in range(2,b):
            if a%i!=0 and b%k!=0:
                n=(a+b)/2
                return [a,b]
f(n)

首先,让我们创建一个函数来检查一个数是否为素数(一个相当慢的函数):

def is_prime(n):
    for x in range(2, n):
        if n % x == 0:
            return False
    return True

然后我们注意到,要使两个数的平均值为 n,它们的总和必须为 2 * n。还有一个数字,假设 x 将小于或等于 n。所以现在很简单:

def f(n):
    for x in range(2, n + 1): # Since smaller will be at most n
        y = 2 * n - x # Since x + y must be 2 * n
        if is_prime(x) and is_prime(y):
            return [x, y]

我们现在可以测试:

>>> f(10)
[3, 17]
>>> f(12)
[5, 19]
>>> f(3)
[3, 3]

如果我没理解错的话,这个程序只需要找到一对质数,所以肯定是你把平均值(n)乘以2,然后找到所有相加的整数对,然后检查两者是否是素数。

检查 python 中素数的蛮力解决方案是:

def is_prime(n):
    if n==1 or n==0:
        return False
    for i in range(3,n):
        if n%i==0:
            return False
    return True

其他更快的解决方案和这个可以找到 here

可以通过蛮力找到总和为 2 的平均值的整数对(但是 returns 每对两次):

def sums(n):
    return [[x,n-x] for x in range(1,n)]

综合起来,使用这两个函数:

def f(n):
    for a in sums(n*2):
        if is_prime(a[0]) and is_prime(a[1]):
            return a
    return 'None found'

希望对您有所帮助。