Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import sqrt
- def sieve_of_eratosthenes(primes, from_n, to_n):
- length = to_n - from_n
- arr = [True]*length + [False]
- for p in primes:
- for i in range((to_n - 1 - (from_n-1)//p*p)//p):
- b = -from_n % p
- arr[b + p*i] = False
- for i in range(int(sqrt(to_n)) + 1 - from_n):
- if arr[i]:
- p = from_n + i
- for j in range(1, (to_n - 1 - (from_n-1)//p*p)//p):
- b = -from_n % p
- arr[b + p*j] = False
- for i in range(to_n - from_n + 1):
- if arr[i]:
- primes.append(from_n + i)
- return primes
- class Primes:
- def stream():
- counter1 = 0
- counter2 = 1
- primes = sieve_of_eratosthenes([2], 3, 100000)
- length = len(primes)
- while True:
- print(primes[counter1])
- yield primes[counter1]
- if counter1 + 1 == length:
- primes = sieve_of_eratosthenes(primes, counter2*100000, (counter2+1)*100000) # 100000 - размер сегмента решета
- length = len(primes)
- counter2 += 1
- if counter2 == 4: # 4 - количество сегментов
- n = primes[-1] + 2
- break
- counter1 += 1
- """
- while True:
- is_primal = True
- for p in primes:
- if p > sqrt(n):
- break
- if n % p == 0:
- is_primal == False
- if is_primal:
- print(n)
- yield n
- n += 2
- """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement