utils.py 752 B

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