如题
其实很简单,要让num1和num2通过计算能的到1,那么设num3为两数的最大公约数,很显然xnum1+ynum2=znum3你说对于num3想要乘上一个整数后得1,那不只有11吗,所以num1和num2互质才能求得1。
继续推导。对应的num1,num2,num3同样有最大公因数num4,那么要想xnum1+ynum2+znum3=1,则必然存在nnum4=1。很显然就变成了要想一个数组是好数组那么存在多个数的最大公因数为1,既然某些数的最大公因数为1了,很显然整个数组所有元素的最大公因数同样应为1,由此
public static boolean isGoodArray(int[] nums) {
int x=nums[0];
for (int i=1;i<nums.length;i++) { //遍历求最大公因数
x=dox(x,nums[i]); //当前公因数等于前值公因数与当前数的最大公因数
}
return x==1; //判断是否为1即可
}
public static int dox(int x,int y) { //辗转相除法求取最大公因数
if(y!=0) {
return dox(y,x%y);
}
return x;
}
结果