30 lines
696 B
Python
30 lines
696 B
Python
import itertools
|
|
from typing import Any, Iterator
|
|
|
|
from ..base import BaseSolver
|
|
|
|
|
|
def presents(n: int, elf: int, max: int) -> int:
|
|
count = 0
|
|
k = 1
|
|
while k * k < n:
|
|
if n % k == 0:
|
|
if n // k <= max:
|
|
count += elf * k
|
|
if k <= max:
|
|
count += elf * (n // k)
|
|
k += 1
|
|
|
|
if k * k == n and k <= max:
|
|
count += elf * k
|
|
|
|
return count
|
|
|
|
|
|
class Solver(BaseSolver):
|
|
def solve(self, input: str) -> Iterator[Any]:
|
|
target = int(input)
|
|
|
|
yield next(n for n in itertools.count(1) if presents(n, 10, target) >= target)
|
|
yield next(n for n in itertools.count(1) if presents(n, 11, 50) >= target)
|