给你 x,y,kx, y, kx,y,k 三个正整数,每次可以选择以下操作之一:
- x=x−1x = x - 1x=x−1
- x=x/kx = x / kx=x/k 当且仅当 x%k==0x \% k == 0x%k==0
请问你将 xxx 变为 yyy 的最小操作次数。
输入
三个正整数 1≤x,y,k≤1091 \leq x, y, k \leq 10^91≤x,y,k≤109
输出
一行一个正整数,表示最小操作次数
输入
10 4 2
输出
2
题解
一个显然的思路是:能除k就除k。因为除法不会差于减一操作。所以在x%k!=0的时候,我们可以直接减去x%k的值,反之,我们可以直接除以k。
但是当x//k<y的时候,我们就不能直接除以k了,因为这样会导致x<y,所以我们只能减去x-y的值。
这里在注意一点,当k=1的时候,我们只能减一,因为除一是没有意义的。会导致死循环
代码见网站内部(文章顶部):塔子哥的文字题解

656

被折叠的 条评论
为什么被折叠?



