给定两个整数 n , x n,x n,x。
你可以对 x x x 进行任意次以下操作:
- 选择 x x x 的一位数字 y y y,将 x x x 替换为 x × y x \times y x×y。
请你计算通过使用上述操作,将 x x x 变为一个 n n n 位数字(不含前导 0 0 0),所需要的最少操作次数。
例如,当 n = 3 , x = 2 n=3,x=2 n=3,x=2 时,对 2 2 2 进行如下 4 4 4 次操作,即可使其变为 3 3 3 位数字:
- 将 2 2 2 替换为 2 × 2 = 4 2 \times 2 = 4 2×2=4。
- 将 4 4 4 替换为 4 × 4 = 16 4 \times 4 = 16 4×4=16。
- 将 16 16 16 替换为 16 × 6 = 96 16 \times 6 = 96 16×6=96。
- 将 96 96 96 替换为 96 × 9 = 864 96 \times 9 = 864 96×9=864。
输入格式
共一行,包含两个整数 n , x n,x n,x。
输出格式
一个整数,表示将 x x x 变为一个 n n n 位数字,所需要的最少操作次数。
如果无解,则输出 -1
。
数据范围
所有测试点满足 2 ≤ n ≤ 19 2 \le n \le 19 2≤n≤19, 1 ≤ x < 1 0 n − 1 1 \le x < 10^{n-1} 1≤x<10n−1。
输入样例1:
2 1
输出样例1:
-1
输入样例2:
3 2
输出样例2:
4
输入样例3:
13 42
输出样例3:
12
N,x = map(int,input().split())
ans = float('inf')
cnt = 0
def qmi(a,b):
ans = 1;
while b!=0:
if b&1 == 1:ans*=a
a*=a
b>>=1
return ans
def DFS(n,cnt):
global N,ans
if len(str(n)) == N:ans = min(ans , cnt)
if cnt >= ans or len(str(n)) > N:return
if cnt+(N - len(str(n))) >=ans:return#用10的好处,可以直接加,用9还要qmi()
#因为最多每一次就乘以9,干脆算作乘以10 ,那么至少cnt+(N - len(str(n)))次才能到n位数
a = set()#去重
for i in str(n):
a.add(ord(i) - ord('0'))
for A in a:
#print(n)
if A >= 2:
DFS(n*A,cnt+1)
DFS(x,0)
if ans !=float('inf'):print(ans)
else: print(-1)