You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.0 KiB

7 years ago
  1. from math import log
  2. import sys
  3. sys.path.insert(0,'X:\\Users\\Raphael\\Documents\\primes\\')
  4. from prime_loader import get_prime
  5. p_list = []
  6. for i in range(10**3):
  7. p_list += get_prime(i*10**6)
  8. def factor(n,skip = False):
  9. f = {}
  10. if n in p_list and not skip:
  11. f[n] = 1
  12. return f
  13. for p in p_list:
  14. if n%p == 0:
  15. max_p = int(log(n,p))
  16. for i in range(max_p,-1,-1):
  17. if n%(p**i) == 0:
  18. f[p] = i
  19. ## print('{}**{}'.format(p,f[p]))
  20. n //= p**i
  21. break
  22. if n == 1:
  23. return f
  24. def ff(n):
  25. main = {}
  26. for i in range(2,n+1):
  27. l = factor(i)
  28. for p in l.keys():
  29. try:
  30. main[p] += l[p]
  31. except KeyError:
  32. main[p] = l[p]
  33. return main
  34. def prod(val,func = lambda x:x):
  35. v = 1
  36. for i in val:
  37. v *= func(i)
  38. return v
  39. def toitent(n):
  40. f = factor(n)
  41. c = n//prod(f.keys())
  42. return c*prod(f.keys(),lambda x: x-1)