Евгени обнови решението на 22.04.2012 11:39 (преди над 12 години)
+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)