Ошибка заключается во втором цикле for.Вы просматриваете возможные простые числа x
и хотите проверить, что y = num - x
также простое число.
Ошибка в вашей логике заключается в том, что во втором цикле for, если первый элемент в цикле y = num - x
не простое число, оно вернет False
, не проверяя другие возможные значения.
Вы можете исправить это, переместив оператор return False
из одного цикла, но так как вы уже сгенерировалисписок простых чисел меньше num
, primelist
(а так как y = num - x
, (если простое y
существует) будет в этом списке), вы можете просто проверить членство в списке:
for x in primelist:
y= num-x
# Note: num = x + y, thus need only check y prime
if y in primelist:
return True
# If no such y is prime, not possible
else:
return False
Примечание: Я бы посоветовал сделать логику вашего скрипта более модульной, разделив генератор простых списков на его собственную функцию:
def partition(num):
"""
Return True if there exist primes x,y such that num = x + y.
Else return False.
"""
primelist = primes(num)
for x in primelist:
y= num-x
# Note: num = x + y, thus need only check y prime
if y in primelist:
return True
# If no such y is prime, not possible
else:
return False
def primes(num):
"""Return list of all primes less than num."""
primelist=[]
for i in range(2,num + 1):
for p in range(2,i):
if (i % p) == 0:
break
else:
primelist.append(i)
return primelist