From c94f06c49dcfc70aa0931d124fe0c00f013d177a Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Thu, 27 Aug 2020 14:56:42 +0530 Subject: [PATCH 1/6] Create __init__.py --- project_euler/problem_63/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 project_euler/problem_63/__init__.py diff --git a/project_euler/problem_63/__init__.py b/project_euler/problem_63/__init__.py new file mode 100644 index 000000000000..792d6005489e --- /dev/null +++ b/project_euler/problem_63/__init__.py @@ -0,0 +1 @@ +# From d55b3763e1b705f2108ae9eb73a88109e7258e35 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Thu, 27 Aug 2020 14:57:11 +0530 Subject: [PATCH 2/6] Add files via upload --- project_euler/problem_63/sol1.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 project_euler/problem_63/sol1.py diff --git a/project_euler/problem_63/sol1.py b/project_euler/problem_63/sol1.py new file mode 100644 index 000000000000..dbc8db9eb9ac --- /dev/null +++ b/project_euler/problem_63/sol1.py @@ -0,0 +1,31 @@ +""" +The 5-digit number, 16807=75, is also a fifth power. Similarly, the 9-digit number, +134217728=89, is a ninth power. +How many n-digit positive integers exist which are also an nth power? +""" + +""" +The maximum base can be 9 because all n-digit numbers < 10^n. +Now 9**23 has 22 digits so the maximum power can be 22. +Using these conclusions, we will calculate the result. +""" + + +def compute_nums(max_base: int = 10, max_power: int = 22) -> int: + """ + Returns the count of all n-digit numbers which are nth power + >>> compute_nums(10,22) + 49 + """ + bases = list(range(1, max_base)) + powers = list(range(1, max_power)) + count = 0 + for base in bases: + for power in powers: + if len(str((base ** power))) == power: + count += 1 + return count + + +if __name__ == "__main__": + print(f"{compute_nums(10, 22) = }") From ebe1cb15b6699a499dda888ba493c1363c31793c Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Thu, 27 Aug 2020 15:40:50 +0530 Subject: [PATCH 3/6] Update project_euler/problem_63/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_63/sol1.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project_euler/problem_63/sol1.py b/project_euler/problem_63/sol1.py index dbc8db9eb9ac..161d42dbcdb9 100644 --- a/project_euler/problem_63/sol1.py +++ b/project_euler/problem_63/sol1.py @@ -14,7 +14,8 @@ def compute_nums(max_base: int = 10, max_power: int = 22) -> int: """ Returns the count of all n-digit numbers which are nth power - >>> compute_nums(10,22) + >>> compute_nums(10, 22) + 49 """ bases = list(range(1, max_base)) From 866863b8c69ed33ce06d8b7401b5075aa93707a1 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Thu, 27 Aug 2020 15:44:26 +0530 Subject: [PATCH 4/6] Update sol1.py --- project_euler/problem_63/sol1.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/project_euler/problem_63/sol1.py b/project_euler/problem_63/sol1.py index 161d42dbcdb9..9648d40334d2 100644 --- a/project_euler/problem_63/sol1.py +++ b/project_euler/problem_63/sol1.py @@ -15,17 +15,13 @@ def compute_nums(max_base: int = 10, max_power: int = 22) -> int: """ Returns the count of all n-digit numbers which are nth power >>> compute_nums(10, 22) - 49 """ bases = list(range(1, max_base)) powers = list(range(1, max_power)) - count = 0 - for base in bases: - for power in powers: - if len(str((base ** power))) == power: - count += 1 - return count + return sum( + 1 for power in powers for base in bases if len(str((base ** power))) == power + ) if __name__ == "__main__": From ad7762657ffae6201f8aef34075479e6944f466e Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Thu, 27 Aug 2020 16:26:59 +0530 Subject: [PATCH 5/6] Update sol1.py --- project_euler/problem_63/sol1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project_euler/problem_63/sol1.py b/project_euler/problem_63/sol1.py index 9648d40334d2..e6fe67abc9e6 100644 --- a/project_euler/problem_63/sol1.py +++ b/project_euler/problem_63/sol1.py @@ -17,8 +17,8 @@ def compute_nums(max_base: int = 10, max_power: int = 22) -> int: >>> compute_nums(10, 22) 49 """ - bases = list(range(1, max_base)) - powers = list(range(1, max_power)) + bases = range(1, max_base) + powers = range(1, max_power) return sum( 1 for power in powers for base in bases if len(str((base ** power))) == power ) From 5dfa46186e713b1e968a47a40c9ad82856ec04f7 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Thu, 27 Aug 2020 16:45:58 +0530 Subject: [PATCH 6/6] Update sol1.py --- project_euler/problem_63/sol1.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/project_euler/problem_63/sol1.py b/project_euler/problem_63/sol1.py index e6fe67abc9e6..e429db07bf8a 100644 --- a/project_euler/problem_63/sol1.py +++ b/project_euler/problem_63/sol1.py @@ -16,6 +16,12 @@ def compute_nums(max_base: int = 10, max_power: int = 22) -> int: Returns the count of all n-digit numbers which are nth power >>> compute_nums(10, 22) 49 + >>> compute_nums(0, 0) + 0 + >>> compute_nums(1, 1) + 0 + >>> compute_nums(-1, -1) + 0 """ bases = range(1, max_base) powers = range(1, max_power)