예제 #1
0
def digit_factorials():
    result = 0
    factorials = [eulerlib.factorial(i) for i in range(10)]
    for n in range(4 * eulerlib.factorial(8) + 1):
        digits_of_n = [int(i) for i in str(n)]
        n_fact = sum([factorials[digit] for digit in digits_of_n])
        if n == n_fact:
            print(n)
            result += n_fact
    return result - 3
예제 #2
0
def compute():
	TURNS = 15
	# Dynamic programming
	ways = [[1]]
	for i in range(1, TURNS + 1):
		row = []
		for j in range(i + 1):
			temp = 0
			if j < i:
				temp = ways[i - 1][j] * i
			if j > 0:
				temp += ways[i - 1][j - 1]
			row.append(temp)
		ways.append(row)
	
	numer = 0
	for i in range(TURNS //2 + 1, TURNS + 1):
		numer += ways[TURNS][i]
	denom = eulerlib.factorial(TURNS + 1)
	return str(denom // numer)
예제 #3
0
def compute():
    TURNS = 15
    # Dynamic programming
    ways = [[1]]
    for i in range(1, TURNS + 1):
        row = []
        for j in range(i + 1):
            temp = 0
            if j < i:
                temp = ways[i - 1][j] * i
            if j > 0:
                temp += ways[i - 1][j - 1]
            row.append(temp)
        ways.append(row)

    numer = 0
    for i in range(TURNS // 2 + 1, TURNS + 1):
        numer += ways[TURNS][i]
    denom = eulerlib.factorial(TURNS + 1)
    return str(denom // numer)
예제 #4
0
# https://www.nayuki.io/page/project-euler-solutions
# https://github.com/nayuki/Project-Euler-solutions
# 

import eulerlib, sys
if sys.version_info.major == 2:
	range = xrange


def compute():
	# As stated in the problem, 1 = 1! and 2 = 2! are excluded.
	# If a number has at least n >= 8 digits, then even if every digit is 9,
	# n * 9! is still less than the number (which is at least 10^n).
	ans = sum(i for i in range(3, 10000000) if i == factorial_digit_sum(i))
	return str(ans)


def factorial_digit_sum(n):
	result = 0
	while n >= 10000:
		result += FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS[n % 10000]
		n //= 10000
	return result + FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS[n]

FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS = [sum(eulerlib.factorial(int(c)) for c in str(i)) for i in range(10000)]
FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS = [sum(eulerlib.factorial(int(c)) for c in str(i).zfill(4)) for i in range(10000)]


if __name__ == "__main__":
	print(compute())
예제 #5
0
#!/usr/bin/python

from eulerlib import factorial
from eulerlib import num2List

answerL = []
facts = {}
for ii in range( 0, 10 ):
   facts[ii] = factorial( ii )

for ii in range( 3, 999999 ):
   s = 0
   iiL = num2List(ii)
   for kk in iiL:
      s += facts[kk]

   if s == ii:
      answerL.append( s )

print sum( answerL )
예제 #6
0
if sys.version_info.major == 2:
    range = xrange


def compute():
    # As stated in the problem, 1 = 1! and 2 = 2! are excluded.
    # If a number has at least n >= 8 digits, then even if every digit is 9,
    # n * 9! is still less than the number (which is at least 10^n).
    ans = sum(i for i in range(3, 10000000) if i == factorial_digit_sum(i))
    return str(ans)


def factorial_digit_sum(n):
    result = 0
    while n >= 10000:
        result += FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS[n % 10000]
        n //= 10000
    return result + FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS[n]


FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS = [
    sum(eulerlib.factorial(int(c)) for c in str(i)) for i in range(10000)
]
FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS = [
    sum(eulerlib.factorial(int(c)) for c in str(i).zfill(4))
    for i in range(10000)
]

if __name__ == "__main__":
    print(compute())
예제 #7
0
def compute():
    n = eulerlib.factorial(100)
    ans = sum(map(int, str(n)))
    return str(ans)
예제 #8
0
# http://www.nayuki.io/page/project-euler-solutions
# https://github.com/nayuki/Project-Euler-solutions
# 

import eulerlib, sys
if sys.version_info.major == 2:
    range = xrange


def compute():
	# As stated in the problem, 1 = 1! and 2 = 2! are excluded.
	# If a number has at least n >= 8 digits, then even if every digit is 9,
	# n * 9! is still less than the number (which is at least 10^n).
	ans = sum(i for i in range(3, 10000000) if i == factorial_digit_sum(i))
	return str(ans)


def factorial_digit_sum(n):
	result = 0
	while n >= 10000:
		result += FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS[n % 10000]
		n //= 10000
	return result + FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS[n]

FACTORIAL_DIGITS_SUM_WITHOUT_LEADING_ZEROS = [sum(eulerlib.factorial(int(c)) for c in str(i)) for i in range(10000)]
FACTORIAL_DIGITS_SUM_WITH_LEADING_ZEROS = [sum(eulerlib.factorial(int(c)) for c in str(i).zfill(4)) for i in range(10000)]


if __name__ == "__main__":
	print(compute())
def compute():
	n = eulerlib.factorial(100)
	ans = sum(int(c) for c in str(n))
	return str(ans)
예제 #10
0
#!/usr/bin/python

import eulerlib


def split(anInt):
    l = list(str(anInt))
    return [int(x) for x in l]


if __name__ == '__main__':
    print sum(split(eulerlib.factorial(100)))
예제 #11
0
def compute():
	n = eulerlib.factorial(100)
	ans = sum(map(int, str(n)))
	return str(ans)
예제 #12
0
def binomial(n, k):
	return eulerlib.factorial(n) // (eulerlib.factorial(k) * eulerlib.factorial(n - k))
예제 #13
0
def problem020(n):
    return sum(map(int, list(str(factorial(n)))))
예제 #14
0
#!/usr/bin/python

import eulerlib
import math

if __name__ == '__main__':

    n = 1000000
    nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    nNums = len(nums)
    answer = list()

    while len(nums) > 1:
        f = eulerlib.factorial(nNums - 1)
        nNums -= 1
        tmp = int(math.ceil(float(n) / float(f)))
        answer.append(nums[tmp - 1])
        nums.remove(nums[tmp - 1])
        n -= f * (tmp - 1)

    answer.append(nums[0])

    print ''.join(map(str, answer))

    eulerlib.factorial(6)
def compute():
    n = eulerlib.factorial(100)
    ans = sum(int(c) for c in str(n))
    return str(ans)