From 2b5b2c6304f68112484a599af6ce6121088e14c2 Mon Sep 17 00:00:00 2001 From: Ravi Kandasamy Sundaram Date: Sat, 10 Oct 2020 19:59:02 +0200 Subject: [PATCH] Added solution for Project Euler problem 119 (#2931) Name: Digit power sum Problem Statement: The number 512 is interesting because it is equal to the sum of its digits raised to some power: 5 + 1 + 2 = 8, and 83 = 512. Another example of a number with this property is 614656 = 284. We shall define an to be the nth term of this sequence and insist that a number must contain at least two digits to have a sum. You are given that a2 = 512 and a10 = 614656. Find a30 Reference: https://projecteuler.net/problem=119 reference: #2695 Co-authored-by: Ravi Kandasamy Sundaram --- project_euler/problem_119/__init__.py | 0 project_euler/problem_119/sol1.py | 51 +++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 project_euler/problem_119/__init__.py create mode 100644 project_euler/problem_119/sol1.py diff --git a/project_euler/problem_119/__init__.py b/project_euler/problem_119/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/project_euler/problem_119/sol1.py b/project_euler/problem_119/sol1.py new file mode 100644 index 000000000..7f343ac24 --- /dev/null +++ b/project_euler/problem_119/sol1.py @@ -0,0 +1,51 @@ +""" +Problem 119: https://projecteuler.net/problem=119 + +Name: Digit power sum + +The number 512 is interesting because it is equal to the sum of its digits +raised to some power: 5 + 1 + 2 = 8, and 8^3 = 512. Another example of a number +with this property is 614656 = 28^4. We shall define an to be the nth term of +this sequence and insist that a number must contain at least two digits to have a sum. +You are given that a2 = 512 and a10 = 614656. Find a30 +""" + +import math + + +def digit_sum(n: int) -> int: + """ + Returns the sum of the digits of the number. + >>> digit_sum(123) + 6 + >>> digit_sum(456) + 15 + >>> digit_sum(78910) + 25 + """ + return sum([int(digit) for digit in str(n)]) + + +def solution(n: int = 30) -> int: + """ + Returns the value of 30th digit power sum. + >>> solution(2) + 512 + >>> solution(5) + 5832 + >>> solution(10) + 614656 + """ + digit_to_powers = [] + for digit in range(2, 100): + for power in range(2, 100): + number = int(math.pow(digit, power)) + if digit == digit_sum(number): + digit_to_powers.append(number) + + digit_to_powers.sort() + return digit_to_powers[n - 1] + + +if __name__ == "__main__": + print(solution())