CF1780B GCD Partition

题目描述

在 Kira 的家中,Josuke 看到桌子上有一张写着任务的纸条。 任务内容如下。有一个长度为 $n$ 的数组 $a$。对这个数组进行如下操作: - 选择一个整数 $k > 1$; - 将数组分成 $k$ 个子段$^\dagger$; - 计算每个子段的和,并将这些和写入另一个数组 $b$(其中子段 $(l, r)$ 的和为 ${\sum_{j = l}^{r}a_j}$); - 这种划分的最终得分为 $\gcd(b_1, b_2, \ldots, b_k)^\ddagger$。 你的任务是找到一种划分方式,使得得分最大。Josuke 对这个任务很感兴趣,但他不擅长计算机科学。请你帮他找到最大可能的得分。 $^\dagger$ 将数组分成 $k$ 个子段,指的是 $k$ 对数 $(l_1, r_1), (l_2, r_2), \ldots, (l_k, r_k)$,满足 $l_i \le r_i$,且对于每个 $1 \le j \le k - 1$ 有 $l_{j + 1} = r_j + 1$,同时 $l_1 = 1$ 且 $r_k = n$。这些数对表示子段。 $^\ddagger$ $\gcd(b_1, b_2, \ldots, b_k)$ 表示数组 $b$ 的[最大公约数(GCD)](https://en.wikipedia.org/wiki/Greatest_common_divisor)。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 对于每个测试用例,第一行包含一个整数 $n$($2 \le n \le 2 \cdot 10^5$),表示数组 $a$ 的长度。 第二行包含 $n$ 个整数 $a_1, a_2, a_3, \ldots, a_n$($1 \le a_i \le 10^9$),表示数组 $a$ 本身。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数,表示最优划分下的最大得分。

说明/提示

在第一个测试用例中,你可以选择 $k = 2$,将数组划分为子段 $(1, 2)$ 和 $(3, 4)$。 这样划分的得分为 $\gcd(a_1 + a_2, a_3 + a_4) = \gcd(2 + 2, 1 + 3) = \gcd(4, 4) = 4$。 在第四个测试用例中,你可以选择 $k = 3$,将数组划分为子段 $(1, 2), (3, 5), (6, 6)$。 这种划分的得分为 $\gcd(1 + 2, 1 + 1 + 1, 3) = 3$。 由 ChatGPT 4.1 翻译