题目要求我们构造一个包含 n 个元素的数组,使得所有元素两两不同且它们的最大公约数为 k,同时数组元素之和尽可能小。为了实现这个目标,我们可以遵循以下思路:
分析与思路 最大公约数为 k:这意味着每个元素都可以表示为 k 的倍数。因此,数组中的元素可以是 k, 2k, 3k, ..., nk。 元素两两不同:由于我们从 k 开始依次增加 k 的倍数来生成新的元素,这保证了所有元素都是不同的。 数组元素之和最小:为了使总和最小,我们需要从 k 开始连续取 k 的整数倍,直到得到 n 个这样的元素。这样可以确保所有元素都是 k 的倍数,并且这些元素之间的差异性得到了保证,同时也能保证和是最小的。 计算和:由于选择的是 k, 2k, 3k, ..., nk 这样的序列,这是一个等差数列,其和可以通过公式 S = (n/2) * (首项 + 末项) 来计算。在这个问题中,首项是 k,末项是 nk,所以总和 S 为 (n/2) * (k + nk) 或者简化为 k * n * (n + 1) / 2。 代码详解 Python 深色版本 def solution(n: int, k: int) -> int: # 计算最小和 return k * n * (n + 1) // 2 # 使用整数除法确保结果为整数 函数定义:solution(n: int, k: int) -> int 定义了一个接受两个整数参数 n 和 k 并返回一个整数结果的函数。 计算总和:使用公式 k * n * (n + 1) // 2 直接计算出满足条件的数组元素之和。这里使用了整数除法 // 以确保即使 n * (n + 1) 是奇数时,结果也是整数。 测试样例解释 样例1 (n=3, k=1): 数组可以是 [1, 2, 3],和为 1+2+3=6。 最大公约数为 1,符合要求。 样例2 (n=2, k=2): 数组可以是 [2, 4],和为 2+4=6。 最大公约数为 2,符合要求。 样例3 (n=4, k=3): 数组可以是 [3, 6, 9, 12],和为 3+6+9+12=30。 最大公约数为 3,符合要求。