mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-07-04 16:57:32 +08:00
Add solution for the Euler problem 190 (#12664)
* Add solution for the Euler project problem 164. * Add solution for the Euler project problem 190. * Delete project_euler/problem_164/sol1.py * Delete project_euler/problem_164/__init__.py * Update sol1.py * Update sol1.py * Update sol1.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Maxim Smolskiy <mithridatus@mail.ru> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
0
project_euler/problem_190/__init__.py
Normal file
0
project_euler/problem_190/__init__.py
Normal file
48
project_euler/problem_190/sol1.py
Normal file
48
project_euler/problem_190/sol1.py
Normal file
@ -0,0 +1,48 @@
|
||||
"""
|
||||
Project Euler Problem 190: https://projecteuler.net/problem=190
|
||||
|
||||
Maximising a Weighted Product
|
||||
|
||||
Let S_m = (x_1, x_2, ..., x_m) be the m-tuple of positive real numbers with
|
||||
x_1 + x_2 + ... + x_m = m for which P_m = x_1 * x_2^2 * ... * x_m^m is maximised.
|
||||
|
||||
For example, it can be verified that |_ P_10 _| = 4112
|
||||
(|_ _| is the integer part function).
|
||||
|
||||
Find Sum_{m=2}^15 = |_ P_m _|.
|
||||
|
||||
Solution:
|
||||
- Fix x_1 = m - x_2 - ... - x_m.
|
||||
- Calculate partial derivatives of P_m wrt the x_2, ..., x_m. This gives that
|
||||
x_2 = 2 * x_1, x_3 = 3 * x_1, ..., x_m = m * x_1.
|
||||
- Calculate partial second order derivatives of P_m wrt the x_2, ..., x_m.
|
||||
By plugging in the values from the previous step, can verify that solution is maximum.
|
||||
"""
|
||||
|
||||
|
||||
def solution(n: int = 15) -> int:
|
||||
"""
|
||||
Calculate sum of |_ P_m _| for m from 2 to n.
|
||||
|
||||
>>> solution(2)
|
||||
1
|
||||
>>> solution(3)
|
||||
2
|
||||
>>> solution(4)
|
||||
4
|
||||
>>> solution(5)
|
||||
10
|
||||
"""
|
||||
total = 0
|
||||
for m in range(2, n + 1):
|
||||
x1 = 2 / (m + 1)
|
||||
p = 1.0
|
||||
for i in range(1, m + 1):
|
||||
xi = i * x1
|
||||
p *= xi**i
|
||||
total += int(p)
|
||||
return total
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(f"{solution() = }")
|
Reference in New Issue
Block a user