本题是 http://oj.daimayuan.top/problem/882 的加强版,差别仅在于 n 与 Si 的取值。已使用红色字体标注题面中的区别。
关于序列 {S} 定义 f(S)=gcd(S1,S2,⋯,Sn)。
我们熟知 gcd 运算具有结合律,即 gcd(a,b,c,⋯)=gcd(a,gcd(b,c,⋯)),可以轻松算出 f(S)。
然而 Patricky 认为,那些 f(S)=1 的序列太过朴素。现在给定 {S},他希望您能用下面的操作修改 {S} 使得 f(S)≥2 :
- 选择 i,i+1(i=n),将 ⟨Si,Si+1⟩ 修改为 ⟨Si−1,Si+1+1⟩
- 选择 i,i+1(i=n),将 ⟨Si,Si+1⟩ 修改为 ⟨Si+1,Si+1−1⟩
试回答使得 f(S)≥2 的 最小 操作次数,或回答不可能。
输入格式
输入包含两行,第一行有一个整数 n,表示 {S} 的大小。
接下来一行包含 n 个用空格分隔的整数,依次表示 S1,S2,⋯,Sn。
输出格式
输出使得 f(S)≥2 的最小操作次数。如果不可能,则在一行中输出 −1。
数据规模
- 1≤n≤106
- Si∈[0,106] 但保证 i=1∑nSi≥1,即元素不同时为 0。
样例 1 输入
3
4 8 5
样例 1 输出
9
解释:
[4,8,5]→4[0,12,5]→5[0,17,0]
样例 2 输入
4
0 5 15 10
样例 2 输出
0
样例 3 输入
6
1 2 3 4 5 6
样例 3 输出
2
解释:
[1,2,3,4,5,6]→[0,3,3,4,5,6]→[0,3,3,3,6,6]