写出代码,计算最小自然数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 mathS = 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