一个中等题..
问题描述
小C希望构造一个包含n个元素的数组,且满足以下条件:
- 数组中的所有元素两两不同。
- 数组所有元素的最大公约数为
k
。 - 数组元素之和尽可能小。
任务是输出该数组元素之和的最小值。
测试样例
样例1:
输入:
n = 3 ,k = 1
输出:
6
样例2:
输入:
n = 2 ,k = 2
输出:
6
样例3:
输入:
n = 4 ,k = 3
输出:
30
解题思路
首先,了解题目给定的要求:
-
最大公约数为 k : 这意味着所有的数组元素都必须是
k
的倍数。换句话说,我们可以先将数组元素构造为k * m
这样的形式,其中m
是一个正整数。 -
元素两两不同 : 数组中的每个元素必须是不同的,因此
m
必须是不同的整数。 -
数组元素之和尽可能小 : 我们需要在符合条件的情况下,尽量选择小的整数
m
来构造数组,从而使得数组的和尽可能小。
步骤:
-
对于给定的
n
和k
,我们需要构造一个数组,数组元素的形式是k * m
,其中m
是从1
开始的连续整数,确保元素之间不同。 -
所以,最小的
n
个满足条件的元素可以选择为:k * 1, k * 2, k * 3, ..., k * n
。这样我们得到的数组是[k*1, k*2, k*3, ..., k*n]
。 -
数组元素的和就是这些元素的和,计算方式为:
根据等差数列求和公式,1 到 n 的和为:
因此,最终的数组元素之和为:
代码实现
解释
solution
函数接收两个参数:n
和k
,分别代表数组的元素个数和最大公约数。- 首先计算从
1
到n
的和(即1 + 2 + 3 + ... + n
),然后乘以k
得到数组元素之和。 main
函数中,我们测试了三个示例用例,分别输出了是否符合预期结果。
复杂度分析
- 时间复杂度:计算
1
到n
的和需要常数时间,因此整体时间复杂度为O(1)
。 - 空间复杂度:只用了常数空间,空间复杂度为
O(1)
。