题目:我们定义任意一个序列的最大公约数为最大的能整除序列中所有数的数,例如[2,2,4]的最大公约数为2,[1,2,4]的最大公约数为1,现在想对于一个长度为N的序列,如果最多能删除N-1个数,请问他需要至少删除多少个数可以让序列的最大公约数为1,或者不可能,不可能输出-1。
输入:
2#数据组数
3#每组数据中序列的长度
2 2 4#序列内的数
2
1 2
输出:
-1
0
思路:将数列的第一个数作为数列其他数的除数,只要能整除就把后面的数都删了,再到数列剩下数的第二个作为数列其他数的除数,整除的再删,只到遍历到最后一个数。如果剩下多个数,删的数的个数就是最后结果,如果只能一个数则不能实现输出-1。同时只要1在数列中,一定不用处理最大公约数就是1。
代码:
n = int(input())
for i2 in range(n):
n2 = int(input())
list1 = list(map(int,input().split()))
if 1 in list1:
print(0)
else:
list2 = sorted(list1)
i = 0
list3 = []
while i<len(list2)-1:
for j in reversed(range(len(list2))):
a = list2[i]
if list2[j]%a==0:
list3.append(list2[j])
list2.remove(list2[j])
list2.insert(i,a)
i = i + 1
list3.remove(a)
if len(list2) <=1:
print(-1)
else:
print(len(list3))