Решение на Генератори от Виктор Христосков

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

Към профила на Виктор Христосков

Резултати

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

Код

import math
def primes():
number = 2
yield number
number = 3
while True:
if all([number % divisor for divisor in
range(3, math.floor(math.sqrt(number)) + 1, 2)]):
yield number
number += 2
def is_prime(number):
if number == 2:
return True
if not (number % 2):
return False
if all([number % divisor for divisor in
range(3, math.floor(math.sqrt(number)) + 1, 2)]):
return True
return False
def semiprimes():
semiprime = 4
while True:
prime_divisor_gen = primes()
prime_divisor = next(prime_divisor_gen)
while(prime_divisor <= math.floor(math.sqrt(semiprime))):
if ((not (semiprime % prime_divisor)) and
is_prime(semiprime/prime_divisor)) :
yield semiprime
prime_divisor = next(prime_divisor_gen)
semiprime += 1

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

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

OK

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

Виктор обнови решението на 28.04.2012 15:10 (преди почти 12 години)

+import math
+
+def primes():
+ number = 2
+ yield number
+ number = 3
+ while True:
+ if all([number % divisor for divisor in
+ range(3, math.floor(math.sqrt(number)) + 1, 2)]):
+ yield number
+ number += 2
+
+
+def is_prime(number):
+ if number == 2:
+ return True
+ if not (number % 2):
+ return False
+ if all([number % divisor for divisor in
+ range(3, math.floor(math.sqrt(number)) + 1, 2)]):
+ return True
+ return False
+
+def semiprimes():
+ semiprime = 4
+
+ while True:
+ prime_divisor_gen = primes()
+ prime_divisor = next(prime_divisor_gen)
+
+ while(prime_divisor <= math.floor(math.sqrt(semiprime))):
+
+ if ((not (semiprime % prime_divisor)) and
+ is_prime(semiprime/prime_divisor)) :
+ yield semiprime
+ prime_divisor = next(prime_divisor_gen)
+ semiprime += 1