Skip to content

Instantly share code, notes, and snippets.

@m00nlight
Created February 14, 2015 09:00
Show Gist options
  • Save m00nlight/36c3ecf6d3114338fb75 to your computer and use it in GitHub Desktop.
Save m00nlight/36c3ecf6d3114338fb75 to your computer and use it in GitHub Desktop.
Python Euler's Phi function
import sys
import itertools
def sieve(n):
is_prime = [True] * (n + 1)
prime_list = []
is_prime[0] = is_prime[1] = False
prime_list.append(2)
for i in range(3, n + 1, 2):
if is_prime[i]: prime_list.append(i)
for j in range(i * i, n + 1, i):
is_prime[j] = False
return prime_list
primes = sieve(40000)
def factoriaztion(n):
ret = []
for prime in primes:
while n % prime == 0:
ret.append(prime)
n /= prime
if n == 1: break
if n > 1: ret.append(n)
return ret
if __name__ == '__main__':
n = sys.stdin.readline()
n = int(n)
factors = factoriaztion(n)
factors = itertools.groupby(factors)
ans = 1
for k, v in factors:
l = len(list(v))
ans = ans * (k ** l - k ** (l - 1))
sys.stdout.write(str(ans) + '\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment