Решение на Генератори от Лъчезар Цанов

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

Към профила на Лъчезар Цанов

Резултати

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

Код

from math import *
def isPrime(i):
for x in range(2,round(sqrt(i))+1):
if i % x == 0:
return False
return True
def primes():
def make_generator():
i = 2
while(True):
if isPrime(i):
yield i
i+=1
return iter(make_generator())
def semiprimes():
def make_generator():
i = 4
primes_set = set([])
primes_generator = primes()
current_prime = next(primes_generator)
while(True):
if current_prime <= i // 2:
primes_set.add(current_prime)
current_prime = next(primes_generator)
for x in primes_set:
if (i / x) in primes_set:
yield i
break
i+=1
return iter(make_generator())

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

....
----------------------------------------------------------------------
Ran 4 tests in 0.007s

OK

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

Лъчезар обнови решението на 03.05.2012 17:45 (преди почти 12 години)

+from math import *
+def isPrime(i):
+ for x in range(2,round(sqrt(i))+1):
+ if i % x == 0:
+ return False
+ return True
+
+def primes():
+ def make_generator():
+ i = 2
+ while(True):
+ if isPrime(i):
+ yield i
+ i+=1
+ return iter(make_generator())
+
+def semiprimes():
+ def make_generator():
+ i = 4
+ primes_set = set([])
+ primes_generator = primes()
+ current_prime = next(primes_generator)
+ while(True):
+ if current_prime <= i // 2:
+ primes_set.add(current_prime)
+ current_prime = next(primes_generator)
+ for x in primes_set:
+ if (i / x) in primes_set:
+ yield i
+ break
+ i+=1
+ return iter(make_generator())