Number of distinct greatest common divisors in a sequence of I18-leetcode1819

Title description:

Algorithm: enumeration

code:

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))

Guess you like

Origin blog.csdn.net/m0_58086930/article/details/128683704