Решение на Генератори от Евгени Цаков

Обратно към всички решения

Към профила на Евгени Цаков

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 4 успешни тест(а)
  • 0 неуспешни тест(а)

Код

def is_prime(n):
return n >= 2 and all(map(lambda d: n % d, range(2, int(n ** 0.5) + 1)))
def is_semiprime(n):
return n >= 4 and any(map(lambda d: is_prime(d) and
n % d == 0 and
is_prime(n // d),
range(2, int(n ** 0.5) + 1)))
def filter(pred):
p = 2
while True:
if pred(p):
yield p
p += 1
def primes():
return filter(is_prime)
def semiprimes():
return filter(is_semiprime)

Лог от изпълнението

....
----------------------------------------------------------------------
Ran 4 tests in 0.022s

OK

История (1 версия и 0 коментара)

Евгени обнови решението на 22.04.2012 11:39 (преди над 8 години)

+def is_prime(n):
+ return n >= 2 and all(map(lambda d: n % d, range(2, int(n ** 0.5) + 1)))
+
+
+def is_semiprime(n):
+ return n >= 4 and any(map(lambda d: is_prime(d) and
+ n % d == 0 and
+ is_prime(n // d),
+ range(2, int(n ** 0.5) + 1)))
+
+
+def filter(pred):
+ p = 2
+ while True:
+ if pred(p):
+ yield p
+ p += 1
+
+
+def primes():
+ return filter(is_prime)
+
+
+def semiprimes():
+ return filter(is_semiprime)