Форум сайта python.su
Я новичок. Не судите строго.
Нужно проверить, можно ли получить число n из k простых чисел. К примеру 15 можно получить из суммы 2 + 13.
Простые числа у меня получаются только списком (или словарем). Т. е. проверить я могу только перебором.
К примеру список простых чисел prime
Тогда:
prime = [2, 3, 5, 7, 11, 13....] n = 10 # число, которое нужно получить k = 2 # количество слагаемых a = 0 for i in simple: for j in simple: if i + j == n: a = a + 1 else: a = a if a > 0: print("True") else: print("False")
Отредактировано KindBeetle (Сен. 17, 2016 08:50:00)
Офлайн
ОБерните код в тег - нечитабельно
Офлайн
ZerGисправил.
ОБерните код в тег - нечитабельно
Офлайн
from itertools import combinations primes = [2, 3, 5, 7, 11, 13] n = 12 # число, которое нужно получить k = 2 # количество слагаемых a = 0 for i in combinations(primes, k): if sum(i) == n: a = a + 1 if a > 0: print("True") else: print("False")
combs = [] iterable = [2, 3, 5, 7, 11, 13] r = k = 2 pool = tuple(iterable) n = len(pool) assert r <= n indices = list(range(r)) combs.append(tuple(pool[i] for i in indices)) while True: for i in reversed(range(r)): if indices[i] != i + n - r: break else: break indices[i] += 1 for j in range(i+1, r): indices[j] = indices[j-1] + 1 combs.append(tuple(pool[i] for i in indices)) print(combs)
Офлайн
Shaman, нашел неточность.
В данном варианте он перебирает разные варианты. К примеру при К = 3 ответ будет True, т.к. 2+3+5 = 10, но при К = 5 False, хотя 10 можно получить из К простых чисел. 2+2+2+2+2=10. Нету условия, что каждое слагаемое должно быть отличным от других.
Пробую разобраться.
Отредактировано KindBeetle (Сен. 18, 2016 15:33:03)
Офлайн