Решение на Генератори от Стела Динева

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

Към профила на Стела Динева

Резултати

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

Код

from math import sqrt, floor
def primes():
number = 2
while True:
if all([number % div for div in range(2, floor(sqrt(number)) + 1)]):
yield number
number += 1
def semiprimes():
number = 4
primes_generator = primes()
prime_numbers = [next(primes_generator), ]
multiplied_primes = {prime_numbers[-1] ** 2, }
while True:
if number in multiplied_primes:
yield number
number += 1
if number / 2 > sorted(prime_numbers)[-1]:
prime_numbers.append(next(primes_generator))
multiplied_primes.update({x * y for x in prime_numbers
for y in prime_numbers})

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

....
----------------------------------------------------------------------
Ran 4 tests in 0.017s

OK

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

Стела обнови решението на 26.04.2012 15:09 (преди над 8 години)

+from math import sqrt, floor
+
+
+def primes():
+ number = 2
+ while True:
+ if all([number % div for div in range(2, floor(sqrt(number)) + 1)]):
+ yield number
+ number += 1
+
+
+def semiprimes():
+ number = 4
+ primes_generator = primes()
+ prime_numbers = [next(primes_generator), ]
+ multiplied_primes = {prime_numbers[-1] ** 2, }
+ while True:
+ if number in multiplied_primes:
+ yield number
+ number += 1
+ if number / 2 > sorted(prime_numbers)[-1]:
+ prime_numbers.append(next(primes_generator))
+ multiplied_primes.update({x * y for x in prime_numbers
+ for y in prime_numbers})