Наибольший общий делитель для всех подотрезков
Go
Сложный
math
Задача «Наибольший общий делитель для всех подотрезков»
Дан массив целых чисел a длины n. Необходимо для каждого возможного подотрезка [l, r] (1 ≤ l ≤ r ≤ n) вычислить наибольший общий делитель (НОД) элементов этого подотрезка. Затем среди всех полученных НОДов найти количество различных значений. Требуется реализовать эффективный алгоритм, учитывая, что n может быть до 100000, а элементы массива — до 10^9.
Формат ввода
Первая строка содержит одно целое число n (1 ≤ n ≤ 100000). Вторая строка содержит n целых чисел a_i (1 ≤ a_i ≤ 10^9), разделенных пробелами.
Формат вывода
Выведите одно целое число — количество различных значений НОД среди всех подотрезков массива.
Примеры
Пример 1
ВВОД
3
6 10 15
ВЫВОД
6
Пример 2
ВВОД
4
2 4 8 16
ВЫВОД
4
Пример 3
ВВОД
5
7 14 21 28 35
ВЫВОД
5
Пример 4
ВВОД
5 10 15
ВЫВОД
3
main.go