return previous_tn + n def main(): """ What is the value of the first triangle number to have over five hundred divisors? The 12375th triangle number: 76576500, has 575 divisors found solution in 35.4850001335 seconds """ if len(sys.argv) < 2: usage() sys.exit(0) start = time.time() n = int(sys.argv[1]) i = 1 tn = 1 # initial triangle number value primes_step = 100 primes = [] euler_base.get_nth_prime(primes, primes_step) # populate array of primes to start with while True: tn = get_nth_triangle_number(tn, i) min_prime_number = int(math.sqrt(tn)) while primes[-1] < min_prime_number: # get more primes as needed euler_base.get_nth_prime(primes, len(primes) + primes_step) # determine the factors of tn that are prime numbers prime_factors = [] euler_base.get_prime_factors(primes, prime_factors, tn) # print "tn: %d, prime_factors: %s" % (tn, prime_factors) # use list of primes to determine all divisors of tn divisors = euler_base.get_divisors(set(prime_factors), tn, include_n=True) # print "divisors: %s" % divisors if len(divisors) > n:
import sys import time import euler_base def usage(): print """\nEuler 7: What is the 10001st prime number? (or nth)?....\nUsage:python %s n\n""" % sys.argv[0] if __name__ == '__main__': """ 10001st prime number is 104743 """ if len(sys.argv) < 2: usage() sys.exit(0) start = time.time() n = int(sys.argv[1]) primes = [] print euler_base.get_nth_prime(primes, n) end = time.time() - start print "found solution in %s seconds" % str(end) # print sum(filter(lambda x: x % 3 == 0 or x % 5 == 0, range(1, n)))