utils.py 680 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. def _gcd(a, b):
  2. while b:
  3. a, b = b, a % b
  4. return a
  5. def gcd(*args):
  6. return reduce(_gcd, args)
  7. def is_prime(n):
  8. if n == 2:
  9. return True
  10. if n < 2 or not n & 1:
  11. return False
  12. for i in xrange(3, int(n ** .5) + 1, 2):
  13. if not n % i:
  14. return False
  15. return True
  16. def primes_until(n):
  17. """ Sieve of Eratosthenes """
  18. lst = [False] * n
  19. i = 2
  20. while i < n:
  21. if not lst[i]:
  22. yield i
  23. for j in xrange(i, n, i):
  24. lst[j] = True
  25. i += 1
  26. def nprimes(n):
  27. a = 2
  28. while n:
  29. if is_prime(a):
  30. yield a
  31. n -= 1
  32. a += 1