H - A-B Game
题目大意:输入两个长整型的数a,b。有一种将a变化的操作为:a=a-(a%x), 其中 1<=x<=a-1;
问最少有多少次操作才能使得a<=b。
思路:贪心
因为每次操作a=a-(a%x),1<=x<=a-1,要是操作数最好,那么每次a-(a%x)应该最小。
看如下变形:因为a%x=a-(a/x)*x, 则a-(a%x)=(a/x)*x;要使其最小,x=a/2+1时,(a/x)*x最小。
/**
author:liuwen
*/
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
//freopen("in.txt","r",stdin);
int T,cas=0;
scanf("%d",&T);
while(T--){
long long a,b,x;
cin>>a>>b;
int tot=0;
while(a>b){
tot++;
x=a/2+1;
a=(a/x)*x;
}
cout<<"Case "<<++cas<<": "<<tot<<endl;
}
return 0;
}