Как аппроксимировать сумму числа делителей от 1 до n?

Проблема

Я хочу решить эту проблему:

Пусть количество делителей = d(n) (например, d(6)=4, потому что число 6 имеет 4 делителя, {1, 2, 3, 6}), я хочу вычислить d(1)+d(2 )+d(3)+...+d(n).

Но я не могу рассчитать для больших n, таких как 10 ^ 20 или 10 ^ 30 (я думаю, что алгоритм, вычисляющий за несколько секунд, если n равно 10^30, не существует), поэтому я решил найти алгоритм, который вычисляет приблизительно.

Мое текущее решение

Я обнаружил, что ответ близок к n log n (основание log e=2,71828...)

Но в случае n = 10^17 ошибка составляет около 0,4%.

Это немного точно, но я думаю, что есть более точный алгоритм.

Есть ли более точный алгоритм?


person square1001    schedule 02.05.2017    source источник
comment
Конечно, алгоритм существует.   -  person Josh Lee    schedule 02.05.2017
comment
@JoshLee Что значит? Вы знаете алгоритм решения d(1)+d(2)+...+d(n) за несколько секунд детерминистически?   -  person square1001    schedule 02.05.2017
comment
Без каких-либо ограничений на размер n, время выполнения или требования к памяти алгоритм для суммы делителей n одинаков для малых n и больших n. Если, например, сказать, что наивный алгоритм занимает экспоненциальное время, это прояснит, что вы имеете в виду.   -  person Josh Lee    schedule 02.05.2017
comment
@JoshLee Little отредактировал мой вопрос. n составляет около 10 ^ 30   -  person square1001    schedule 02.05.2017
comment
Код Haskell на oeis.org/A000203 кажется мне достаточно быстрым.   -  person Josh Lee    schedule 02.05.2017
comment
@JoshLee Я не очень хорошо знаю Haskell, поэтому, пожалуйста, расскажите мне алгоритм ... (кажется, код включает в себя массив типа a027748_row)   -  person square1001    schedule 02.05.2017


Ответы (2)


Энциклопедия математики указывает оценку

n log n + (2γ - 1)n + O(√n)

Дирихле (1849 г.). γ — это константа Эйлера–Маскерони. Вы можете просто отбросить член ошибки O(√n).

person David Eisenstat    schedule 02.05.2017

Это суммирующая функция Divisor. Кроме того, https://oeis.org/A006218.

person DAle    schedule 02.05.2017