Решение на Генератори от Тодор Ганчев

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

Към профила на Тодор Ганчев

Резултати

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

Код

def naturals():
current = 2
while(True):
current += 1
yield current
def primes():
primes = [2]
yield 2
for number in naturals():
is_prime = True
for prime in primes:
if number % prime == 0:
is_prime = False
if is_prime:
primes.append(number)
yield number
def semiprimes():
prime_generator = primes()
primes_list = [next(prime_generator)]
for number in naturals():
if number > primes_list[-1]:
append_more_primes(primes_list, prime_generator, number)
for prime in primes_list:
if number % prime ==0 and number != prime and number / prime in primes_list:
yield number
break
def append_more_primes(primes_list, prime_generator, limit):
while(primes_list[-1] < limit):
primes_list.append(next(prime_generator))

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

....
----------------------------------------------------------------------
Ran 4 tests in 0.019s

OK

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

Тодор обнови решението на 03.05.2012 18:36 (преди почти 12 години)

+def naturals():
+ current = 2
+ while(True):
+ current += 1
+ yield current
+
+def primes():
+ primes = [2]
+ yield 2
+
+ for number in naturals():
+ is_prime = True
+ for prime in primes:
+ if number % prime == 0:
+ is_prime = False
+ if is_prime:
+ primes.append(number)
+ yield number
+
+def semiprimes():
+ prime_generator = primes()
+ primes_list = [next(prime_generator)]
+
+ for number in naturals():
+ if number > primes_list[-1]:
+ append_more_primes(primes_list, prime_generator, number)
+ for prime in primes_list:
+ if number % prime ==0 and number != prime and number / prime in primes_list:
+ yield number
+ break
+
+def append_more_primes(primes_list, prime_generator, limit):
+ while(primes_list[-1] < limit):
+ primes_list.append(next(prime_generator))