#!/usr/bin/python # -*- coding: utf-8 -*- """Euler problem 3, HackerRank version. HackerRank promises the input numbers will be 1 trillion or less. This is still small enough that we can use trial division; we only need to try primes up to 1 million, of which there are only 78498. The Sieve of Eratosthenes only needs about 500 ms to calculate them on my laptop. """ import sys def sieve(n): "Of Eratosthenes." ps = [True] * n for i in range(2, n): if ps[i]: yield i ps[i*i:n:i] = [False] * len(xrange(i*i, n, i)) primes = list(sieve(1000*1000)) primeset = set(primes) def factorize(n): factors = [] while True: for p in primes: if n % p == 0: factors.append(p) n //= p break else: # if we didn’t break, n must be a large prime factors.append(n) break if n in primeset: factors.append(n) break return factors def ok(a, b): assert a == b, (a, b) ok(sorted(factorize(13195)), [5, 7, 13, 29]) def handle_fucking_stupid_hackerrank_input_format(): raw_input() for n in sys.stdin: print max(factorize(int(n))) if __name__ == '__main__': handle_fucking_stupid_hackerrank_input_format()