def is_truncatable(n,prime_stream): prime_digit_list = lambda d : prime_stream.is_prime(integer_utils.convert_digit_list_to_int(d)) truncate_left = lambda d : all(prime_digit_list(d[x:]) for x in xrange(0,len(d))) truncate_right = lambda d : all(prime_digit_list(d[:x]) for x in xrange(1,len(d))) digit_list = integer_utils.convert_int_to_digit_list(n) return truncate_left(digit_list) and truncate_right(digit_list)
def odd_palindrome_generator(): for x in xrange(0,499999): n = x * 2 + 1 digits = integer_utils.convert_int_to_digit_list(n) if(is_palindrome(digits)): yield n
#Project Euler Problem 92 #Description: A number chain is created by continuously adding the square of the digits to form a new number until it has been seen before #How many starting numbers under 10 million will arrive at 89 import os import sys if(len(sys.argv) > 1): os.chdir(sys.argv[1]) sys.path.append("../../Utils") sys.path.append("Utils") import integer_utils next = lambda n : sum(x ** 2 for x in integer_utils.convert_int_to_digit_list(n)) max_number = 10000000 cache = {1 : 1, 89 : 89} max_next = 9 ** 2 * len(integer_utils.convert_int_to_digit_list(max_number - 1)) for i in xrange(1,max_next + 1): numbers = [i] while(not numbers[-1] in cache): numbers.append(next(numbers[-1])) end_value = cache[numbers[-1]] for x in numbers: cache[x] = end_value print(sum(1 for x in xrange(1,max_number) if cache[next(x)] == 89))
#Project Euler Problem 34 #Description: Find all the sum of all numbers that are equal to the sum of the factorials of their digits import os import sys if(len(sys.argv) > 1): os.chdir(sys.argv[1]) sys.path.append("../../Utils") sys.path.append("Utils") import operator import integer_utils factorial = {x : reduce(operator.mul, [y for y in xrange(1,x + 1)],1) for x in xrange(0,10)} digit_factorial_equal = lambda n : n == sum(factorial[x] for x in integer_utils.convert_int_to_digit_list(n)) print(sum(e for e in xrange(10,factorial[9] * 7) if digit_factorial_equal(e)))
#Project Euler Problem 25 #Description: Find the index of the first term in the Fibbonacci sequence to contain 1000 digits import os import sys if(len(sys.argv) > 1): os.chdir(sys.argv[1]) sys.path.append("../../Utils") sys.path.append("Utils") import integer_utils def generate_fibonacci_sequence(): elements = [0,0,1] while(True): yield elements[2] elements = elements[1:] elements.append(sum(elements)) digit_length = lambda n : len(integer_utils.convert_int_to_digit_list(n)) g = (i + 1 for i,f in enumerate(generate_fibonacci_sequence()) if digit_length(f) > 999) print(g.next())
#Project Euler Problem 40 #Description: import os import sys if(len(sys.argv) > 1): os.chdir(sys.argv[1]) sys.path.append("../../Utils") sys.path.append("Utils") import integer_utils import operator i = 0 digits = [] while(len(digits) < 1000000): i += 1 digits.extend(integer_utils.convert_int_to_digit_list(i)) print(reduce(operator.mul,[digits[10 ** j - 1] for j in xrange(0,7)],1))
#Project Euler Problem 20 #Description: Find the sum of the digits in the number 100! import os import sys if(len(sys.argv) > 1): os.chdir(sys.argv[1]) sys.path.append("../../Utils") sys.path.append("Utils") import operator import integer_utils factorial = reduce(operator.mul, [x for x in xrange(1,101)],1) print(sum([x for x in integer_utils.convert_int_to_digit_list(factorial)]))