我正在解决将数字表示为连续数字之和的问题。
所以我想出了如果我们用公式n((n+1)//2)
来获得二次方程式的根,我们就可以做到o(1)
的时间复杂度。
假设我们有任何数字x,如果使用上述公式n((n + 1)// 2)形成的二次方程式和数字x包含任何有效的根,则它可以是连续数字的和。不是。
答案 0 :(得分:1)
您正在寻找x ^ 2 + x-2N = 0的解决方案,其中N是x之前的数字总和所产生的总数。如果x是整数,则有解决方案。使用标准的二次方程式解决方案,我们得出:
x =(-1 +√(1 + 8N))/ 2
所以您可以这样编写函数:
def isSumToN(N):
x = ((8*N+1)**0.5-1)/2
return int(x) if x%1==0 else False
输出:
isSumToN(10) # 4
isSumToN(101) # False