题目描述:
算法:枚举
代码:
def countDifferentSubsequenceGCDs(nums):
def gcd(a,b):
if b==0:return a
return gcd(b,a%b)
#枚举所有可能的最大公约数,并且去nums当中去查找验证能否出现对应的序列
#1.显然所有子序列所能提供的最大公约数的值一定是落在[1,max(nums)]中
maxVal=max(nums)
ans=0
#逐一枚举所有可能的最大公约数,并加以验证
for i in range(1,maxVal+1):
#最大公约数是i的时候,最小的元素只能是自己或者更大一些
subGcd=0#子序列的最大公约数
j=i
while j<=maxVal:
if j in nums:#一个元素压根都不存在,那也就是不用检查当前的元素了
if subGcd==0:
subGcd=j
else:
subGcd=gcd(subGcd,j)
if subGcd==i:
ans+=1
break#能找到一个可以提供最大公约数为i的子序列即可
j+=i
return ans
nums=[6,10,3]
print(countDifferentSubsequenceGCDs(nums))