mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-23 21:11:08 +00:00
Add Project Euler Problem 078 solution 01 (#5565)
* Create sol1.py * updating DIRECTORY.md * Create __init__.py * Add docstring * Reformat with black * Fix flake8 issues * Add EOL * Fix formatting issues * Add docstring * Add func return type * Change return type * Remove test print statement * Reformat code * Fix return types * Break loop * Update doctest sol * Update project_euler/problem_078/sol1.py Co-authored-by: John Law <johnlaw.po@gmail.com> * Added doctest and changed return type * Add int() * Fix flake8 issues * Use argument instead of fixed constant * Update sol1.py * fix sol1.py Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: John Law <johnlaw.po@gmail.com>
This commit is contained in:
parent
ce9a139b56
commit
329feb4928
|
@ -788,6 +788,8 @@
|
|||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_076/sol1.py)
|
||||
* Problem 077
|
||||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_077/sol1.py)
|
||||
* Problem 078
|
||||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_078/sol1.py)
|
||||
* Problem 080
|
||||
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_080/sol1.py)
|
||||
* Problem 081
|
||||
|
|
0
project_euler/problem_078/__init__.py
Normal file
0
project_euler/problem_078/__init__.py
Normal file
55
project_euler/problem_078/sol1.py
Normal file
55
project_euler/problem_078/sol1.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
"""
|
||||
Problem 78
|
||||
Url: https://projecteuler.net/problem=78
|
||||
Statement:
|
||||
Let p(n) represent the number of different ways in which n coins
|
||||
can be separated into piles. For example, five coins can be separated
|
||||
into piles in exactly seven different ways, so p(5)=7.
|
||||
|
||||
OOOOO
|
||||
OOOO O
|
||||
OOO OO
|
||||
OOO O O
|
||||
OO OO O
|
||||
OO O O O
|
||||
O O O O O
|
||||
Find the least value of n for which p(n) is divisible by one million.
|
||||
"""
|
||||
|
||||
import itertools
|
||||
|
||||
|
||||
def solution(number: int = 1000000) -> int:
|
||||
"""
|
||||
>>> solution()
|
||||
55374
|
||||
"""
|
||||
partitions = [1]
|
||||
|
||||
for i in itertools.count(len(partitions)):
|
||||
item = 0
|
||||
for j in itertools.count(1):
|
||||
sign = -1 if j % 2 == 0 else +1
|
||||
index = (j * j * 3 - j) // 2
|
||||
if index > i:
|
||||
break
|
||||
item += partitions[i - index] * sign
|
||||
index += j
|
||||
if index > i:
|
||||
break
|
||||
item += partitions[i - index] * sign
|
||||
item %= number
|
||||
|
||||
if item == 0:
|
||||
return i
|
||||
partitions.append(item)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
||||
|
||||
print(f"{solution() = }")
|
Loading…
Reference in New Issue
Block a user