1 条题解
-
0
如果你用Python时间超限了
常规写法会时间超限
n, k = map(int, input().split()) for i in range(n, 0, -1): if i % k == 0: print(i) break
数学优化 from gpt
如果你面对时间限制并且需要优化代码,可以通过数学方式来避免逐个检查每个数。你的目标是找到从
n
开始,第一个能被k
整除的数,我们可以利用数学计算来减少不必要的循环操作。优化思路:
- 你不需要每次都从
n
开始逐个检查。实际上,最大的能被k
整除的数应该是n // k * k
,即从n
向下寻找的最大整数倍数。 - 你可以直接计算出这个数,而无需逐个检查每个数字。
优化后的代码:
n, k = map(int, input().split()) # 计算从 n 开始的第一个能被 k 整除的数 if n % k == 0: print(n) else: print(n // k * k)
解释:
n // k * k
:这个表达式计算出最大的不大于n
的k
的倍数。- 例如,如果
n = 10
,k = 3
,则n // k
结果是3
,然后乘以k
得到9
,即最大的能被3
整除的数。
- 例如,如果
if n % k == 0:
:如果n
本身就能被k
整除,直接输出n
。
代码优化后:
- 这个方法只需要一次简单的整数除法和乘法计算,避免了逐个遍历的循环,所以执行时间非常快,对于大数据也能在 1000ms 内完成。
示例:
输入:
n = 10
,k = 3
- 计算
n // k * k
,得到9
,即10
以下最大的能被3
整除的数。
输出:
9
复杂度分析:
- 时间复杂度:O(1),因为不需要循环,只需几次基本的算术操作。
- 空间复杂度:O(1),只用了常数空间。
这种方法大大提高了程序的效率,避免了时间超限问题,尤其在
n
和k
较大的情况下。 - 你不需要每次都从
- 1
信息
- ID
- 40
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 11522
- 已通过
- 19
- 上传者