【发布时间】:2020-11-18 12:58:27
【问题描述】:
有什么方法可以将 1 到 n 的奇数相加,但没有任何循环,如果没有办法,我如何通过快速算法在少于 n 个循环中完成此任务。
【问题讨论】:
-
请用您尝试过的代码更新您的问题。
标签: python algorithm performance optimization
有什么方法可以将 1 到 n 的奇数相加,但没有任何循环,如果没有办法,我如何通过快速算法在少于 n 个循环中完成此任务。
【问题讨论】:
标签: python algorithm performance optimization
您可以利用算术系列中的求和来对第一个 n 奇数求和(而不是从 0 到 n 的奇数)
a = 1 # from 1
n = 9999 # to n
d = 2 # and skip every even number
n = int((n - a) / d + 1) # locate the number of term for n
sum = int((n / 2) * (2 * a + (n - 1) * d))
时间复杂度:O(1),无循环
参考:Summing an Arithmetic Series
编辑:以适应 n 的情况,例如10000
if n % 2 == 0:
n = n - 1 # to eliminate the case 10000 and find range 1-9999
【讨论】:
n = 2k+1,则结果为(k+1)^2 (+1)
1和n之间的概率之和,所以n可以是偶数。考虑到这一点,我建议编辑答案。
试试这个 -
sum(range(1, n+1, 2))
【讨论】:
你可以试试下面这个,从 1 循环到 n,步进 2
sum(range(1,n,2))
【讨论】: