Math 如何找到大于或等于N的最小三角形数?
我知道如何找到最近的三角形数: m=地板(平方米(2N) T=m(m+1)/2 但这会返回最接近N的三角形数。 我想要最近的三角形数大于或等于N。 如果我输入7,我想要10,而不是6。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*(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
)