一道自编脑洞题

117 阅读1分钟

最近开了下脑洞编了一道题,分享给大伙看看

S(N) 表示 N 的数位和,举例:S(1234) = 1+2+3+4 = 10

令整数 K = N + S(N) + S(S(N)),给出固定 K 值,求出所有使等式成立的正整数 N


解法一

提供一下个人解法

本题如果在不做任何处理的情况下直接暴力搜索,会发现搜索区间很大

于是从缩小搜索区间入手

变形一下

N=KS(N)S(S(N))(1)N=K-S(N)-S(S(N)) \tag{1}

根据

S(N)+S(S(N))>0 S(N)+S(S(N))>0

找出上界

N<K(2)N < K \tag{2}

定义 p(x)p(x)xx 的位数,p(1234)=4p(1234)=4

接下来从位数出发,那么有

S(N)S(i=0i<p(N)910i)S(N)\leqslant S(\sum_{i=0}^{i<p(N)} 9\cdot 10^{i} )

S(1234)S(9999)S(1234)\leqslant S(9999)

定义

Smax(N)=S(i=0i<p(N)910i)S_{max}(N)= S(\sum_{i=0}^{i<p(N)} 9\cdot 10^{i} )

于是有

S(N)Smax(N)Smax(K)(3)S(N)\leqslant S_{max}(N)\leqslant S_{max}(K) \tag{3}

代入(1)中

NKSmax(K)S(Smax(K))N\geqslant K-S_{max}(K)-S(S_{max}(K))

最后

KSmax(K)S(Smax(K))NK(4)K-S_{max}(K)-S(S_{max}(K)) \leqslant N \leqslant K \tag{4}

就是 NN 的搜索范围

整个搜索范围的长度只有 L=Smax(K)+S(Smax(K)) L=S_{max}(K)+S(S_{max}(K))

时间复杂度 O(L)=O(log10K)O(L)=O(log_{10}K)


其实放缩的还不够细,有耐心讨论的话,根据 K 可以找到更小更精确的上界,比如S(1234)<S(999)<S(9999)S(1234)<S(999)<S(9999)

本题也许还有其他思路,朋友说把 N 和 K 的函数画出图的话,整体是波动上升的,利用这个性质也许会有其他解法