mirror of
https://hub.njuu.cf/TheAlgorithms/Python.git
synced 2023-10-11 13:06:12 +08:00
Added solution for Project Euler problem 125 (#3073)
* Added solution for Project Euler problem 125 * Fixed typos
This commit is contained in:
parent
ec9f6b6467
commit
c83e4b77c5
0
project_euler/problem_125/__init__.py
Normal file
0
project_euler/problem_125/__init__.py
Normal file
56
project_euler/problem_125/sol1.py
Normal file
56
project_euler/problem_125/sol1.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
"""
|
||||||
|
Problem 125: https://projecteuler.net/problem=125
|
||||||
|
|
||||||
|
The palindromic number 595 is interesting because it can be written as the sum
|
||||||
|
of consecutive squares: 6^2 + 7^2 + 8^2 + 9^2 + 10^2 + 11^2 + 12^2.
|
||||||
|
|
||||||
|
There are exactly eleven palindromes below one-thousand that can be written as
|
||||||
|
consecutive square sums, and the sum of these palindromes is 4164. Note that
|
||||||
|
1 = 0^2 + 1^2 has not been included as this problem is concerned with the
|
||||||
|
squares of positive integers.
|
||||||
|
|
||||||
|
Find the sum of all the numbers less than 10^8 that are both palindromic and can
|
||||||
|
be written as the sum of consecutive squares.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def is_palindrome(n: int) -> bool:
|
||||||
|
"""
|
||||||
|
Check if an integer is palindromic.
|
||||||
|
>>> is_palindrome(12521)
|
||||||
|
True
|
||||||
|
>>> is_palindrome(12522)
|
||||||
|
False
|
||||||
|
>>> is_palindrome(12210)
|
||||||
|
False
|
||||||
|
"""
|
||||||
|
if n % 10 == 0:
|
||||||
|
return False
|
||||||
|
s = str(n)
|
||||||
|
return s == s[::-1]
|
||||||
|
|
||||||
|
|
||||||
|
def solution() -> int:
|
||||||
|
"""
|
||||||
|
Returns the sum of all numbers less than 1e8 that are both palindromic and
|
||||||
|
can be written as the sum of consecutive squares.
|
||||||
|
"""
|
||||||
|
LIMIT = 10 ** 8
|
||||||
|
answer = set()
|
||||||
|
first_square = 1
|
||||||
|
sum_squares = 5
|
||||||
|
while sum_squares < LIMIT:
|
||||||
|
last_square = first_square + 1
|
||||||
|
while sum_squares < LIMIT:
|
||||||
|
if is_palindrome(sum_squares):
|
||||||
|
answer.add(sum_squares)
|
||||||
|
last_square += 1
|
||||||
|
sum_squares += last_square ** 2
|
||||||
|
first_square += 1
|
||||||
|
sum_squares = first_square ** 2 + (first_square + 1) ** 2
|
||||||
|
|
||||||
|
return sum(answer)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(solution())
|
Loading…
Reference in New Issue
Block a user