Владислав обнови решението на 25.04.2012 18:44 (преди над 12 години)
+def primes():
+ # The prime candidate
+ prime_eventualy = 2
+ while True:
+ p = prime_eventualy - 1
+ #Flag to show if prime_eventualy is a prime
+ #by deviding it by all integers in the range (1, prime_eventualy)
+ prime = True
+ while p != 1:
+ if not(prime_eventualy % p):
+ prime = False
+ break
+ p -= 1
+
+ if prime:
+ yield prime_eventualy
+ prime_eventualy += 1
+
+
+def semiprimes():
+ '''
+ This function generates numbers and first checks
+ if the generated number can be devided by prime
+ and if the remider of the first division can be devided by prime
+ '''
+ semiprime_eventually = 4
+
+ while True:
+ # iterators
+ pp = primes()
+ op = primes()
+
+ # flag indicating if we have a semiprime number
+ semi_flag = False
+
+ first_test_prime = next(pp)
+
+ while semiprime_eventually >= first_test_prime:
+ #if it can be devided by prime
+ remider = semiprime_eventually % first_test_prime
+ if not(remider):
+ break
+ first_test_prime = next(pp)
+
+ second_test_prime = next(op)
+
+ while semiprime_eventually >= second_test_prime:
+ devided_by_second = not(semiprime_eventually % second_test_prime)
+ right_primes = (first_test_prime * second_test_prime) == semiprime_eventually
+ if devided_by_second and right_primes:
+ semi_flag = True
+ break;
+ second_test_prime = next(op)
+
+ if semi_flag:
+ yield semiprime_eventually
+ semiprime_eventually += 1