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

阅读 1.2k
1 个回答

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

$$ \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}")
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题