Máximo divisor comum para todos os subsegmentos

Go Hard math

Tarefa «Máximo divisor comum para todos os subsegmentos»

Dado um array de inteiros a de comprimento n. É necessário para cada possível subsegmento [l, r] (1 ≤ l ≤ r ≤ n) calcular o máximo divisor comum (MDC) dos elementos desse subsegmento. Em seguida, entre todos os MDCs obtidos, encontrar a quantidade de valores distintos. É necessário implementar um algoritmo eficiente, considerando que n pode ser até 100000 e os elementos do array até 10^9.

Formato de Entrada

A primeira linha contém um número inteiro n (1 ≤ n ≤ 100000). A segunda linha contém n números inteiros a_i (1 ≤ a_i ≤ 10^9), separados por espaços.

Formato de Saída

Imprima um único número inteiro — a quantidade de valores distintos de MDC entre todos os subsegmentos do array.

Exemplos

Exemplo 1

ENTRADA
3 6 10 15
SAÍDA
6

Exemplo 2

ENTRADA
4 2 4 8 16
SAÍDA
4

Exemplo 3

ENTRADA
5 7 14 21 28 35
SAÍDA
5

Exemplo 4

ENTRADA
5 10 15
SAÍDA
3
main.go