寻找和为n³的连续奇数序列,求更优代码实现方案
更优实现思路:靠数学公式直接计算
不用预生成大列表再挨个遍历查找,直接通过数学推导算出每个n对应的连续奇数序列的起始值,就能快速生成目标序列,效率更高代码也更简洁。
推导逻辑
假设和为n³的n个连续奇数里,第一个数是a,那这n个数就是 a, a+2, a+4, ..., a+2*(n-1)。用等差数列求和公式算它们的和:
和 = na + 2(0+1+2+...+(n-1)) = na + n(n-1) = n*(a + n - 1)
因为这个和等于n³,两边除以n就能得到:a + n - 1 = n²,算出来起始奇数就是 a = n² - n + 1。
知道起始数后,直接生成从a开始的n个连续奇数就行,每个数比前一个大2。
简洁代码实现(Python为例)
def get_cube_odd_sequences(m): sequences = [] for n in range(1, m+1): start = n**2 - n + 1 # 生成n个连续奇数 sequence = [start + 2*i for i in range(n)] sequences.append((n, n**3, sequence)) return sequences # 测试调用,比如m=5 for n, cube, seq in get_cube_odd_sequences(5): print(f"{n}³ = {cube} = {' + '.join(map(str, seq))}")
为啥这个方案更好
- 不用预存大列表,省内存,尤其是m很大的时候优势明显
- 直接定位起始数,避免了无意义的遍历查找,时间效率更高
- 逻辑清晰,代码短也好维护,一眼就能看懂是怎么回事
内容的提问来源于stack exchange,提问作者Camila Veloso CADE
相关产品推荐
相关产品推荐

