使用 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'
希望对您有所帮助。
我必须创建一个函数 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'
希望对您有所帮助。