Python程序:查找给定数组中任意序列的最大大小,其中每对元素都满足“友好”条件
假设我们有一个大小为n的序列nums。我们必须找到nums的子序列的最大大小,其中每对(p, q)都是友好对?当且仅当满足以下至少一个条件时,一对被称为友好对:1. p的不同质因数个数的奇偶性与q相同。例如,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的末尾
- 如果(j mod k 对所有k在2到j的范围内)为真,则
- 对于prime中的每个j,执行:
- 如果i mod j为0,则
- count := count + 1
- 如果i mod j为0,则
- 如果count为偶数,则
- 将'奇数'插入cnt的末尾
- 否则,
- 将'偶数'插入cnt的末尾
- 对于1到i的每个j,执行:
- 如果i mod j等于0,则
- tot := tot + j
- 如果i mod j等于0,则
- 如果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的末尾
- 如果cnt[i]等于cnt[j]或total[i]等于total[j],则
- 对于i+1到n-1的每个j,执行:
- result := 从result的新集合中创建一个新的列表
- 返回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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP