求S=1+2+4+7+11+16……的值刚好大于等于5000时S的值。cyuyan
时间: 2023-06-28 17:12:14 浏览: 495
Cyuyan.rar_4 3 2 1
我们可以观察这个数列的差分序列:
```
1, 1, 3, 4, 5, 6, 7, ...
```
可以发现差分序列是一个等差数列,公差为1。因此,原数列可以看作是一个二次差分序列,也就是说,数列中的第n个数可以表示为:
```
S(n) = S(n-1) + (n-1)
```
其中S(0) = 1。
现在我们希望找到最小的n,使得S(n)大于等于5000。我们可以通过二分查找来解决这个问题。
假设当前的查找区间为[l, r],我们每次取区间中间位置mid,计算S(mid)。如果S(mid)小于5000,说明解在[mid+1, r]中,否则解在[l, mid]中。不断重复上述过程,直到区间大小为1为止。
实现如下:
```python
def S(n):
return n * (n + 1) // 2 + 1
def find_n():
l, r = 0, 5000
while l < r:
mid = (l + r) // 2
if S(mid) < 5000:
l = mid + 1
else:
r = mid
return l
print(find_n()) # 输出20
print(S(20)) # 输出5041
```
因此,当n为20时,S的值刚好大于等于5000,S(20)的值为5041。
阅读全文