Math 如何找到大于或等于N的最小三角形数?

Math 如何找到大于或等于N的最小三角形数?,math,number-theory,Math,Number Theory,我知道如何找到最近的三角形数: m=地板(平方米(2N) T=m(m+1)/2 但这会返回最接近N的三角形数。 我想要最近的三角形数大于或等于N。 如果我输入7,我想要10,而不是6。 有人能帮我吗?计算相应的二次方程m*(m+1)/2>=N的m,将其四舍五入(使用上限)并得到所需的结果 Python示例: import math def uppertri(n): #dis = math.sqrt(1 + 8 * n) #m = math.ceil((dis-1)/2)

我知道如何找到最近的三角形数: m=地板(平方米(2N) T=m(m+1)/2 但这会返回最接近N的三角形数。 我想要最近的三角形数大于或等于N。 如果我输入7,我想要10,而不是6。
有人能帮我吗?

计算相应的二次方程
m*(m+1)/2>=N的
m
,将其四舍五入(使用上限)并得到所需的结果

Python示例:

import math

def uppertri(n):
    #dis = math.sqrt(1 + 8 * n)
    #m = math.ceil((dis-1)/2)
    #better variant proposed by Mark Dickinson (for Python 3.8+)
    m = (math.isqrt(8*n) + 1) // 2
    return m*(m+1)//2

for i in range(1, 30):
    uppertri(i)
    print(i, uppertri(i), end = "; ")

1 1; 2 3; 3 3; 4 6; 5 6; 6 6; 7 10; 8 10; 9 10; 10 10; 11 15; 12 15; 13 15; 14 15; 
15 15; 16 21; 17 21; 18 21; 19 21; 20 21; 21 21; 22 28; 23 28; 24 28; 25 28; 26 28;
27 28; 28 28; 29 36; 

m=(math.isqrt(8*n)+1)//2也可以在这里使用,并且避免了使用浮点可能带来的不精确性。(这可能对OP没有帮助,但我猜代码高尔夫版的这个看起来像
uppertri=lambda n:(math.isqrt(8*n)+1 | 1)**2//8