在Python中找到给定数组中任意序列的最大大小,其中每对元素均为“好”的
假设我们有一个大小为n的序列nums。我们必须找到nums中任意子序列的最大大小,其中每对元素(p,q)均为“好”的?当且仅当它满足以下条件之一时,才称为“好”的成对:(1) p的不同质因数的数量的奇偶性等于b的数量的奇偶性。例如,值18有两个不同的质因数:2和3。(2) p的所有正因数的总和的奇偶性与q相同。
因此,如果输入类似nums=[2,3,6,8],则输出将为3
要解决此问题,我们将遵循以下步骤-
- 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 ]插入结果的末尾
- 对于范围在i +1到n-1的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