#2295. 区间最大公约数之和

区间最大公约数之和

区间最大公约数之和

题目描述

给定一个长度为 nn 的正整数序列 a1,a2,…,ana_1,a_2,\ldots,a_n。

对于一个区间 [l,r][l,r],定义

g(l,r)=gcd⁡(al,al+1,…,ar).g(l,r)=\gcd(a_l,a_{l+1},\ldots,a_r).

请你求出所有非空连续区间的最大公约数之和:

∑1≤l≤r≤ng(l,r).\sum_{1\le l\le r\le n}g(l,r).

答案可能超过 6464 位有符号整数范围,使用 C++ 时建议用 __int128 保存答案。

输入格式

第一行一个正整数 nn。

第二行 nn 个正整数 a1,a2,…,ana_1,a_2,\ldots,a_n。

输出格式

输出一行一个整数,表示所有非空连续区间的最大公约数之和。答案不取模。

样例 1

3
2 4 6
18

六个非空连续区间的最大公约数分别为 2,4,6,2,2,22,4,6,2,2,2,因此答案为 1818。

样例 2

见下发文件:gcd2.in 与 gcd2.out。

数据范围

对于 100%100\% 的数据,1≤n≤2×1051\le n\le2\times10^5,1≤ai≤1091\le a_i\le10^9。

测试点编号 分值合计 n≤n\le ai≤a_i\le 特殊性质
01~02 10 200200 10910^9 无
03~04 50005000
05~06 2×1052\times10^5 3030
07~08 10910^9 所有 aia_i 相同
09~12 20 5×1045\times10^4 无
13~20 40 2×1052\times10^5

更多样例

以下 2 组样例取自原题附件: