1 条题解

  • 0
    @ 2025-1-18 1:07:24

    如果你用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:这个表达式计算出最大的不大于 nk 的倍数。
      • 例如,如果 n = 10k = 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),只用了常数空间。

    这种方法大大提高了程序的效率,避免了时间超限问题,尤其在 nk 较大的情况下。

    • 1

    信息

    ID
    40
    时间
    1000ms
    内存
    64MiB
    难度
    10
    标签
    递交数
    11522
    已通过
    19
    上传者