mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Added solution for Project Euler problem 87. (#3141)
* Added solution for Project Euler problem 87. Fixes: #2695 * Update docstring and 0-padding in directory name. Reference: #3256
This commit is contained in:
parent
a1e9656eca
commit
9971f981a1
0
project_euler/problem_087/__init__.py
Normal file
0
project_euler/problem_087/__init__.py
Normal file
52
project_euler/problem_087/sol1.py
Normal file
52
project_euler/problem_087/sol1.py
Normal file
|
@ -0,0 +1,52 @@
|
|||
"""
|
||||
Project Euler Problem 87: https://projecteuler.net/problem=87
|
||||
|
||||
The smallest number expressible as the sum of a prime square, prime cube, and prime
|
||||
fourth power is 28. In fact, there are exactly four numbers below fifty that can be
|
||||
expressed in such a way:
|
||||
|
||||
28 = 22 + 23 + 24
|
||||
33 = 32 + 23 + 24
|
||||
49 = 52 + 23 + 24
|
||||
47 = 22 + 33 + 24
|
||||
|
||||
How many numbers below fifty million can be expressed as the sum of a prime square,
|
||||
prime cube, and prime fourth power?
|
||||
"""
|
||||
|
||||
|
||||
def solution(limit: int = 50000000) -> int:
|
||||
"""
|
||||
Return the number of integers less than limit which can be expressed as the sum
|
||||
of a prime square, prime cube, and prime fourth power.
|
||||
>>> solution(50)
|
||||
4
|
||||
"""
|
||||
ret = set()
|
||||
prime_square_limit = int((limit - 24) ** (1 / 2))
|
||||
|
||||
primes = set(range(3, prime_square_limit + 1, 2))
|
||||
primes.add(2)
|
||||
for p in range(3, prime_square_limit + 1, 2):
|
||||
if p not in primes:
|
||||
continue
|
||||
primes.difference_update(set(range(p * p, prime_square_limit + 1, p)))
|
||||
|
||||
for prime1 in primes:
|
||||
square = prime1 * prime1
|
||||
for prime2 in primes:
|
||||
cube = prime2 * prime2 * prime2
|
||||
if square + cube >= limit - 16:
|
||||
break
|
||||
for prime3 in primes:
|
||||
tetr = prime3 * prime3 * prime3 * prime3
|
||||
total = square + cube + tetr
|
||||
if total >= limit:
|
||||
break
|
||||
ret.add(total)
|
||||
|
||||
return len(ret)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(f"{solution() = }")
|
Loading…
Reference in New Issue
Block a user