311007: CF1920C. Partitioning the Array

Memory Limit:256 MB Time Limit:3 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

C. Partitioning the Arraytime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output

Allen has an array $a_1, a_2,\ldots,a_n$. For every positive integer $k$ that is a divisor of $n$, Allen does the following:

  • He partitions the array into $\frac{n}{k}$ disjoint subarrays of length $k$. In other words, he partitions the array into the following subarrays: $$[a_1,a_2,\ldots,a_k],[a_{k+1}, a_{k+2},\ldots,a_{2k}],\ldots,[a_{n-k+1},a_{n-k+2},\ldots,a_{n}]$$
  • Allen earns one point if there exists some positive integer $m$ ($m \geq 2$) such that if he replaces every element in the array with its remainder when divided by $m$, then all subarrays will be identical.

Help Allen find the number of points he will earn.

Input

Each test consists of multiple test cases. The first line contains a single integer $t$ ($1 \leq t \leq 10^4$) — the number of test cases. The description of the test cases follows.

The first line of each test case contains a single integer $n$ ($1 \leq n \leq 2\cdot10^5$) — the length of the array $a$.

The second line of each test case contains $n$ integers $a_1, a_2,\ldots, a_n$ ($1 \leq a_i \leq n$) — the elements of the array $a$.

It is guaranteed that the sum of $n$ over all test cases does not exceed $2 \cdot 10^5$.

Output

For each test case, output a single integer — the number of points Allen will earn.

ExampleInput
8
4
1 2 1 4
3
1 2 3
5
1 1 1 1 1
6
1 3 1 1 3 1
6
6 2 6 2 2 2
6
2 6 3 6 6 6
10
1 7 5 1 4 3 1 3 1 4
1
1
Output
2
1
2
4
4
1
2
1
Note

In the first test case, $k=2$ earns a point since Allen can pick $m = 2$ and both subarrays will be equal to $[1, 0]$. $k=4$ also earns a point, since no matter what $m$ Allen chooses, there will be only one subarray and thus all subarrays are equal.

In the second test case, Allen earns $1$ point for $k=3$, where his choice for $m$ does not matter.

Output

题目大意:
给定一个数组a[1], a[2], ..., a[n],对于每个正整数k(k是n的因数),艾伦将数组划分为n/k个长度为k的不相交子数组。如果存在一个正整数m(m≥2),使得将数组中的每个元素替换为其除以m的余数后,所有子数组都相同,那么艾伦获得1分。求艾伦总共能获得多少分。

输入数据格式:
第一行包含一个整数t(1≤t≤10^4),表示测试用例的数量。接下来是t个测试用例的描述。
每个测试用例的第一行包含一个整数n(1≤n≤2×10^5),表示数组a的长度。
每个测试用例的第二行包含n个整数a[1], a[2], ..., a[n](1≤a[i]≤n),表示数组a的元素。
所有测试用例的n之和不超过2×10^5。

输出数据格式:
对于每个测试用例,输出一个整数,表示艾伦能获得的分数。

示例:
输入:
8
4
1 2 1 4
3
1 2 3
5
1 1 1 1 1
6
1 3 1 1 3 1
6
6 2 6 2 2 2
6
2 6 3 6 6 6
10
1 7 5 1 4 3 1 3 1 4
1
1

输出:
2
1
2
4
4
1
2
1

说明:
在第一个测试用例中,k=2时,艾伦可以选择m=2,使得两个子数组都等于[1, 0],获得1分。k=4时,无论艾伦选择什么m,都只有一个子数组,因此也获得1分。
在第二个测试用例中,艾伦在k=3时获得1分,无论他选择什么m。题目大意: 给定一个数组a[1], a[2], ..., a[n],对于每个正整数k(k是n的因数),艾伦将数组划分为n/k个长度为k的不相交子数组。如果存在一个正整数m(m≥2),使得将数组中的每个元素替换为其除以m的余数后,所有子数组都相同,那么艾伦获得1分。求艾伦总共能获得多少分。 输入数据格式: 第一行包含一个整数t(1≤t≤10^4),表示测试用例的数量。接下来是t个测试用例的描述。 每个测试用例的第一行包含一个整数n(1≤n≤2×10^5),表示数组a的长度。 每个测试用例的第二行包含n个整数a[1], a[2], ..., a[n](1≤a[i]≤n),表示数组a的元素。 所有测试用例的n之和不超过2×10^5。 输出数据格式: 对于每个测试用例,输出一个整数,表示艾伦能获得的分数。 示例: 输入: 8 4 1 2 1 4 3 1 2 3 5 1 1 1 1 1 6 1 3 1 1 3 1 6 6 2 6 2 2 2 6 2 6 3 6 6 6 10 1 7 5 1 4 3 1 3 1 4 1 1 输出: 2 1 2 4 4 1 2 1 说明: 在第一个测试用例中,k=2时,艾伦可以选择m=2,使得两个子数组都等于[1, 0],获得1分。k=4时,无论艾伦选择什么m,都只有一个子数组,因此也获得1分。 在第二个测试用例中,艾伦在k=3时获得1分,无论他选择什么m。

加入题单

上一题 下一题 算法标签: