s
。i
位,我们在合法范围内(若受上界约束则不超过 s[i]
,否则不超过 9;且不小于前一位已定的数字)的候选数字中,从大到小尝试最优选择。d
之后,根据当前已选的数字和剩余位置,可算出可能的最小/最大剩余位数和:
在一个虚拟货币挖矿系统中,每个矿工拥有一定的算力值n(范围在1 到1018之间)。系统需要为每个矿工分配一个算力档位,这个档位必须是小于等于矿工当前算力n的最大“稳定算力档”,并且这个档位的算力值各个数位之和必须是一个质数(质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数)。“稳定算力档”定义为从左到右每一位数字都不小于前一位数字,例如123、111、399都是符合要求的稳定算力档,像121、897
这种则不符合要求。合理分配算力档位有助于提高挖矿效率和稳定性。
给定一个正整数n(1≤n≤1018)
返回小于等于n的最大稳定算力档,且该整数的所有数位之和为质数。如果不存在这样的整数,则返回−1
输入
111
输出
111
111本身即是"稳定算力档",从左到右每一位数字都不小于前一位数字,1+1+1=3是质数,所以函数返回111
输入
1
输出
-1
小于等于1的"稳定算力档"只有1,1的数位之和为1,1不是质数(质数定义为大于1的自然数中,除了1和它自身外,不能被其他自然数整除的数),所以函数返回−1
输入
123
输出
122
首先小于等于123的“稳定算力档"有 123、122、111等。123 的数位之和为1+2+3=6,不是质数,不符合条件。再继续找是122,数位之和为1+2+2=5是质数符合"稳定算力档条件。111的数位之和1+1+1=3也为质数也满足"稳定算力档"的条件,但111小于122,所以小于等于n的最大稳定算力档为122,函数返回122。