from operator import itemgetter from common import sieve limit = 100000 primes = sieve(limit).primes() prime_list = list(primes) prime_list.sort() def rad(n): result = 1 if n in primes: return n for p in prime_list: if result*p > n: break if n % p == 0: result *= p return result radlist = [] for n in xrange(1, limit+1): radlist.append((n, rad(n))) radlist.sort(key=itemgetter(1)) print radlist[10000-1][0]