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

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

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

Резултати

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

Код

def primes():
yield 2;
numbers = 3;
while(True):
i = 2;
half_of_number = numbers / 2;
while(numbers % i != 0 and half_of_number > i):
i = i + 1;
if (numbers % i!= 0):
yield numbers;
numbers = numbers + 1;
def semiprimes():
numbers = 4;
while(True):
divisor_one = primes();
divisor_one_value = next(divisor_one);
is_semiprime = False;
half_of_number = numbers / 2;
while(divisor_one_value <= half_of_number and not (is_semiprime)):
divisor_two = primes();
divisor_two_value = next(divisor_two);
while(divisor_one_value * divisor_two_value != numbers
and divisor_two_value <= half_of_number):
divisor_two_value = next(divisor_two);
if(divisor_one_value * divisor_two_value == numbers):
yield numbers;
is_semiprime = True;
divisor_one_value = next(divisor_one);
numbers = numbers + 1;

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

....
----------------------------------------------------------------------
Ran 4 tests in 2.379s

OK

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

Лазар обнови решението на 03.05.2012 00:22 (преди над 12 години)

+def primes():
+ yield 2;
+ numbers = 3;
+ while(True):
+ i = 2;
+ half_of_number = numbers / 2;
+ while(numbers % i != 0 and half_of_number > i):
+ i = i + 1;
+ if (numbers % i!= 0):
+ yield numbers;
+ numbers = numbers + 1;
+def semiprimes():
+ numbers = 4;
+ while(True):
+ divisor_one = primes();
+ divisor_one_value = next(divisor_one);
+ is_semiprime = False;
+ half_of_number = numbers / 2;
+ while(divisor_one_value <= half_of_number and not (is_semiprime)):
+ divisor_two = primes();
+ divisor_two_value = next(divisor_two);
+ while(divisor_one_value * divisor_two_value != numbers
+ and divisor_two_value <= half_of_number):
+ divisor_two_value = next(divisor_two);
+ if(divisor_one_value * divisor_two_value == numbers):
+ yield numbers;
+ is_semiprime = True;
+ divisor_one_value = next(divisor_one);
+ numbers = numbers + 1;