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
45 lines
1.0 KiB
from math import log
|
|
import sys
|
|
sys.path.insert(0,'X:\\Users\\Raphael\\Documents\\primes\\')
|
|
from prime_loader import get_prime
|
|
p_list = []
|
|
for i in range(10**3):
|
|
p_list += get_prime(i*10**6)
|
|
|
|
|
|
def factor(n,skip = False):
|
|
f = {}
|
|
if n in p_list and not skip:
|
|
f[n] = 1
|
|
return f
|
|
for p in p_list:
|
|
if n%p == 0:
|
|
max_p = int(log(n,p))
|
|
for i in range(max_p,-1,-1):
|
|
if n%(p**i) == 0:
|
|
f[p] = i
|
|
## print('{}**{}'.format(p,f[p]))
|
|
n //= p**i
|
|
break
|
|
if n == 1:
|
|
return f
|
|
def ff(n):
|
|
main = {}
|
|
for i in range(2,n+1):
|
|
l = factor(i)
|
|
for p in l.keys():
|
|
try:
|
|
main[p] += l[p]
|
|
except KeyError:
|
|
main[p] = l[p]
|
|
return main
|
|
def prod(val,func = lambda x:x):
|
|
v = 1
|
|
for i in val:
|
|
v *= func(i)
|
|
return v
|
|
def toitent(n):
|
|
f = factor(n)
|
|
c = n//prod(f.keys())
|
|
return c*prod(f.keys(),lambda x: x-1)
|
|
|