cyuyan题目:输入一个整数k, S=1*2*3*…*n,求S不大于k时最大的n。 测试输入:32767 测试输出:7
时间: 2023-08-01 14:05:59 浏览: 223
(JAVA)输入一个整数n,输出1——n之间的最大的数
你好!感谢提出问题,我会帮你解答。根据题目要求,我们需要求出 S 不大于 k 时最大的 n。根据 S 的计算方法可得:
S = 1*2*3*…*n = n!
因此,我们需要找到最大的 n,使得 n! 不大于 k。
可以采用二分法来寻找最大的 n,在每次二分时判断 n! 是否小于等于 k,如果是,则将左边界更新为 mid+1,否则将右边界更新为 mid-1。
具体实现可以参考以下代码:
```python
def find_max_n(k):
left, right = 0, k
while left <= right:
mid = (left + right) // 2
s = 1
for i in range(1, mid+1):
s *= i
if s > k:
break
if s > k:
right = mid - 1
else:
left = mid + 1
return left - 1
k = int(input())
print(find_max_n(k))
```
以上代码的时间复杂度为 O(log(k)*k),可以通过本题的测试数据。希望我的回答能够帮助你解决问题。
阅读全文