原始为求这么一个式子:

的数值增长是非常快的,在的范围下,其个数非常有限,那么我们不妨预处理出阶乘表,阶乘到刚好大于的位数就可以了。

由于的个数非常有限,我们可以直接枚举,然后一个二维问题就变为了:

求最小,其实也就是绝对值在0附近,那么不妨直接假设,那么式子变为:

由于可能有偏移,可以试一下是否满足满足要求。

import sys
from math import inf
if __name__ == '__main__':
    n = int(input())
    fac = [1]
    for i in range(1,31):
        if fac[-1] * i > 10 ** 9:
            fac.append(fac[-1] * i)
            break
        fac.append(fac[-1] * i)
    #退化为f(y)的函数
    mn = abs(n)
    res_x = 1
    res_y = 1
    def cal(y: int) -> None:
        if y <= 0 or y == 2:
            return
        global mn
        global res_y
        global res_x
        if abs((fac[x] - 1) * y - n) < mn:
            mn = abs((fac[x] - 1) * y - n)
            res_x = x
            res_y = y
    for x in range(3,len(fac)):
        if x == 2:
            continue
        y = n // (fac[x] - 1)
        cal(y)
        cal(y - 1)
        cal(y + 1)
    print(res_x, res_y)