区间最大公约数之和
题目描述
给定一个长度为 n 的正整数序列 a1,a2,…,an。
对于一个区间 [l,r],定义
g(l,r)=gcd(al,al+1,…,ar).
请你求出所有非空连续区间的最大公约数之和:
1≤l≤r≤n∑g(l,r).
答案可能超过 64 位有符号整数范围,使用 C++ 时建议用 __int128 保存答案。
输入格式
第一行一个正整数 n。
第二行 n 个正整数 a1,a2,…,an。
输出格式
输出一行一个整数,表示所有非空连续区间的最大公约数之和。答案不取模。
样例 1
3
2 4 6
18
六个非空连续区间的最大公约数分别为 2,4,6,2,2,2,因此答案为 18。
样例 2
见下发文件:gcd2.in 与 gcd2.out。
数据范围
对于 100% 的数据,1≤n≤2×105,1≤ai≤109。
| 测试点编号 |
分值合计 |
n≤ |
ai≤ |
特殊性质 |
| 01~02 |
10 |
200 |
109 |
无 |
| 03~04 |
5000 |
| 05~06 |
2×105 |
30 |
| 07~08 |
109 |
所有 ai 相同 |
| 09~12 |
20 |
5×104 |
无 |
| 13~20 |
40 |
2×105 |
更多样例
以下 2 组样例取自原题附件: