在Python中找到给定数组中任意序列的最大大小,其中每对元素均为“好”的

在Python中找到给定数组中任意序列的最大大小,其中每对元素均为“好”的

假设我们有一个大小为n的序列nums。我们必须找到nums中任意子序列的最大大小,其中每对元素(p,q)均为“好”的?当且仅当它满足以下条件之一时,才称为“好”的成对:(1) p的不同质因数的数量的奇偶性等于b的数量的奇偶性。例如,值18有两个不同的质因数:2和3。(2) p的所有正因数的总和的奇偶性与q相同。

因此,如果输入类似nums=[2,3,6,8],则输出将为3

在Python中找到给定数组中任意序列的最大大小,其中每对元素均为“好”的

要解决此问题,我们将遵循以下步骤-

  • n := nums的大小
  • 定义三个空列表cnt、total、result
  • 对于nums中的每个i,执行以下操作
    • count := 0,tot := 0
    • prime :=一个新列表
    • 对于nums中的每个j,执行以下操作
      • 如果(j mod k)为所有k的范围为2到j,则为真,则
      • 将j插入prime的末尾
    • 对于prime中的每个j,执行以下操作
      • 如果i mod j为0,则
      • count := count + 1
    • 如果count为偶数,则
      • 将’奇数’插入cnt的末尾
    • 否则,
      • 将’偶数’插入cnt的末尾
    • 对于范围在1到i的j,执行以下操作
      • 如果i mod j与0相同,则
      • tot := tot + j
    • 如果tot为奇数,则
      • 将’奇数’插入total的末尾
    • 否则,
      • 将“偶数”插入total的末尾
  • 对于范围在0到n-2的i,执行以下操作
    • 对于范围在i +1到n-1的j,执行以下操作
      • 如果cnt[i]与cnt[j]相同或total[i]与total[j]相同,则
      • 将nums[i]插入result的末尾
      • 如果j与n-2相同,则
        • 将nums [j ]插入结果的末尾
  • result :=来自新结果集的新列表
  • 返回结果的大小

示例

让我们看一下以下实现,以更好地理解

def solve(nums):
   n = len(nums)
   cnt = []
   total = []
   result = []
   for i in nums:
      count = 0
      tot = 0

      prime = []
      for j in nums:
         if all(j % k for k in range(2, j)) == True:
            prime.append(j)

      for j in prime:
         if i %  j== 0:
            count += 1
      if count % 2:
         cnt.append('odd')
      else:
         cnt.append('even')

      for j in range(1,i+1):
         if i % j == 0:
            tot += j

      if tot % 2:
         total.append('odd')
      else:
         total.append('even')

   for i in range(n-1):
      for j in range(i+1, n):

         if cnt[i] == cnt[j] or total[i] == total[j]:
            result.append(nums[i])

            if j == n-1:
               result.append(nums[j])

   result = list(set(result))
   return len(result)

nums = [2,3,6,8]
print(solve(nums))

输入

15, 3, 8

输出

3

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程