还有这个题

链接:https://ac.nowcoder.com/acm/evaluate/5032/A
来源:牛客网

题目描述

牛牛喜欢玩游戏,今天他买了一个新游戏。在游戏开始的时候,屏幕上出现一个大小为S的史莱姆。
牛牛手里有一把剑,这把剑一次可以将一个大小为z的史莱姆砍成两个大小为x和y的史莱姆,其中x+y=z,其中x,y,z必须是都是正整数,所以z一定是大于1的。
每次将史莱姆砍成x和y两半的时候,牛牛可以获得x*y个金币,现在他想知道他最少砍多少次可以获得至少M个金币。如果他无法完成,则返回-1.

输入描述:

输入包括两行。
第一行输入正整数S,表示最初史莱姆的大小。
第一行输入正整数M,表示需要获得的最少金币数。

输出描述:

输出一个整数表示最少砍多少次可以获得M个金币,如果他无法完成,则返回-1.

示例1

输入

3
2

输出

1

说明

有一个大小为3的史莱姆,牛牛需要获得2个金币。所以牛牛只需要将史莱姆砍成两个大小分别是1和2的史莱姆,就可以获得2个金币了。

示例2

输入

3
3

输出

2

说明

最初状态和第一个样例一样,但牛牛需要获得3个金币。
牛牛将史莱姆分成大小1和2的两个史莱姆,获得两个金币,其中大小为1的史莱姆不能继续分割了,所以他需要将大小为2的史莱姆砍成大小1和1的史莱姆,获得一个金币,总共获得三个金币。

示例3

输入

3
4

输出

-1

说明

在样例2中将大小为3的史莱姆砍成三个大小为1的史莱姆获得了三个金币,不能再继续分割史莱姆获得金币。

示例4

输入

765
271828

输出

14

备注:

(2leq Sleq 1000)
(1leq M leq 1000000000)

原文地址:https://www.cnblogs.com/skkyk/p/14051654.html