Модифицированное
решето Эратосфена:
import numpy as np
from numba import njit
# С использованием numpy
def max_divisors_v1(n):
divs = np.ones(n + 1, np.uint8)
for step in range(2, n + 1):
divs[step::step] += 1
divs[0] = 0
num = divs.argmax()
return num, divs[num]
# Без numpy, чистый Python
def max_divisors_v2(n):
divs = [1] * (n + 1)
for step in range(2, n + 1):
for index in range(step, n + 1, step):
divs[index] += 1
divs[0] = 0
cnt = max(divs)
num = divs.index(cnt)
return num, cnt
# JIT-компиляция с декоратором @njit
max_divisors_v3 = njit(max_divisors_v2)
Вывод результата и тайминги выполнения: