我必须创建一个函数f(n)
,它将返回一对具有算术平均值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)
答案 0 :(得分:1)
首先,让我们创建一个函数来检查数字是否为素数(相当慢):
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]
答案 1 :(得分:0)
如果我理解正确,程序只需要找到一对素数,所以你肯定要将平均值(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的整数对可以通过强力完成(但这会使每对返回两次):
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'
希望这有用。