孤独的数组

149 阅读1分钟

链接: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);
    }

}