Co-authored-by: Mikael CAPELLE <mikael.capelle@thalesaleniaspace.com> Co-authored-by: Mikaël Capelle <capelle.mikael@gmail.com> Reviewed-on: #3
		
			
				
	
	
		
			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)
 |