def prime_factors(n): f = [] while n % 2 == 0: f.append(2) n //= 2 d = 3 while d * d <= n: while n % d == 0: f.append(d) n //= d d += 2 if n != 1: f.append(n) return f assert(prime_factors(8) == [2, 2, 2]) assert(prime_factors(2501232) == [2, 2, 2, 2, 3, 107, 487]) def prime_factors_unique(n): f = [] if n % 2 == 0: f.append(2) while n % 2 == 0: n //= 2 d = 3 while d * d <= n: if n % d == 0: f.append(d) while n % d == 0: n //= d d += 2 if n != 1: f.append(n) return f def prime_factors_count(n): return len(prime_factors_unique(n)) print(prime_factors_count(9699690)) #factor_count_max = 0 #n_max = 0 #for n in range(1, 1000001): # factor_count = prime_factors_count(n) # if factor_count > factor_count_max: # factor_count_max = factor_count # n_max = n #print("factor count: {} n: {}".format(factor_count_max, n_max)) def get_phi(n): phi = n for p in prime_factors_unique(n): phi *= (1 - 1 / p) return int(phi) print(get_phi(210412312))