写出代码,计算最小自然数N,让从1到N的所有正整数之和大于S

写出代码,计算最小自然数N,让从1到N的所有正整数之和大于S

写出代码,计算最小自然数N,让从1到N的所有正整数之和大于S(运用while循环,N和S都是变量),并且打印结果。 例如,如果S=10, 那么 N=5 (1+2+3+4+5=15>10); 如果S=100, 那么N=14(1+2+3+。。。+14=105>100)

打印输出格式如下:
The sum of the first 14 positive integers is bigger than 100


回答:

我们可以试着列一个不等式

$$

\frac{(N+1)\times N}{2} > S

$$

因为求的是最小正整数解,所以

$$

\frac{(N+1)\times N}{2} = S+1

$$

化简后得到

$$

N^2+N-(2\times S+1) = 0

$$

解一元二次方程,得

$$

N = \frac{-1 \pm \sqrt{1^2 + 4 \times 1\times(2\times S+1)}}{2}

$$

$$

N = \frac{-1 \pm \sqrt{8\times S + 5}}{2}

$$

因为最终求的是正整数,所以

$$

N = \lceil\frac{\sqrt{8\times S + 5} - 1}{2}\rceil

$$

最终的代码是

import math

S = int(input())

print(f"The sum of the first {math.ceil((-1 + (8 * S + 5) ** .5) / 2)} positive integers is bigger than {S}")

以上是 写出代码,计算最小自然数N,让从1到N的所有正整数之和大于S 的全部内容, 来源链接: utcz.com/p/938447.html

回到顶部