链接:ac.nowcoder.com/acm/contest…
来源:牛客网
给出一个长度为 n 的整数数组A,分别为A1,A2,...,An。牛牛可以对数组进行操作,每次操作选定一个下标 i (1≤i≤n)(1 <= i <= n)(1≤i≤n),再确定一个整数 k (0<k<109),令 Ai=Ai×k。牛牛想要知道,最少需要操作几次,才能让数组 A 变成 "孤独的数组" 。
”孤独的数组“ 定义: 对于全部 i (2≤i≤n),gcd(Ai−1,Ai)=1。
如果无论怎么操作都无法让数组变成孤独的,输出 −1。
输入描述:
第一行包括一个整数 n (2≤n≤105) 表示数组的长度。
第二行包括 n 个整数,分别表示 nA1,A2,...,An,(1≤Ai≤109)。
输出描述:
输出一行,包含一个整数,表示最小的操作次数。
示例1
输入
2
1 2
输出
0
说明
gcd(1,2)=1,无需再操作。
示例2
输入
2
2 2
输出
-1
说明
无论怎么操作都无法让 gcd(A1,A2)=1,输出 −1。
题解
gcd求最大公因数,无论k为多少,A[i] * k后,最大公因数不变。
所以只需要查看是否最大公因数为为1即可
代码
import java.util.Scanner;
public class Main{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = sc.nextInt();
}
int count = 0;
for(int i = 0; i < n - 1; i++){
if(gcd(arr[i], arr[i + 1]) != 1){
count = -1;
break;
}
}
System.out.println(count);
}
public static int gcd(int x, int y){
return x % y == 0 ? y : gcd(y, x % y);
}
}