汤圆星の汤圆树
Time Limit: 1000MS Memory limit: 65536K
题目描述
又到了汤圆星球一年一度的汤圆节了,为了筹备节目,汤圆星人需要从汤圆树上采摘小汤圆。
已知汤圆树是汤圆星球的一棵神圣植物,整个汤圆星只有这么一棵,而且只有每年汤圆节才会结果。
每个小汤圆最多与m个小汤圆连接,并且保证没有环。为了保证小汤圆的新鲜,汤圆星人只会采摘最外层的小汤圆,也就是叶子汤圆。
那么问题就来了,为了采够n个汤圆,今年这棵汤圆树最少需要生长为几层高?默认树根为第一层。
已知汤圆树是汤圆星球的一棵神圣植物,整个汤圆星只有这么一棵,而且只有每年汤圆节才会结果。
每个小汤圆最多与m个小汤圆连接,并且保证没有环。为了保证小汤圆的新鲜,汤圆星人只会采摘最外层的小汤圆,也就是叶子汤圆。
那么问题就来了,为了采够n个汤圆,今年这棵汤圆树最少需要生长为几层高?默认树根为第一层。
输入
输入包含多组,每组两个正整数m,n(2 <= m <= 1000,1 <= n <= 1000000000)。
输入到0 0结束。
输入到0 0结束。
输出
对于每组输入,输出最少需要的汤圆层数k,如果无法达到目标,输出-1。
示例输入
3 3
3 7
1000 1
2 3
0 0
示例输出
2
4
1
-1
原题地址 http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=3117&cid=1674
代码实例
#include <stdio.h>
#include <string.h>
int main()
{
long n,m,i;
while(~scanf("%ld%ld",&m,&n)&&n&&m)
{
int c=1;
if(n==1)
printf("%d\n",1);
else
{
c=2;
long num=m;
for(i=0;i<30;i++)
{
if(num>=n)
break;
num=num*(m-1);
c++;
}
if(i<30)
printf("%d\n",c);
else
printf("%d\n",-1);
}
}
return 0;
}