http://acm.hdu.edu.cn/showproblem.php?pid=5584
一个x,y只能向上向右走lcm(x,y)个单位。问有多少个不同的起点,能够走到给出的x,y点上
打表发现,到达x,y的答案等于到达x/gcd,y/gcd的答案
那么我们就能把x,y变成互质关系,然后对于互质关系的一对,也一定是由另一个互质关系的点走过来的
按此既可以推出前面一个点了,如果没有即结束。
#include<bits/stdc++.h>
using namespace std;
bool vis[1111][1111];
long long gcd(long long x,long long y)
{
if(y==0)return x;
return gcd(y,x%y);
}
int main(){
int t;
cin>>t;
int cs=1;
while(t--)
{
long long x;
long long y;
cin>>x>>y;
if(x<y)swap(x,y);
long long gc=gcd(x,y);
x/=gc;
y/=gc;
int ans=1;
while(x%(y+1)==0)
{
ans++;
x/=(y+1);
if(x<y)swap(x,y);
}
cout<<"Case #"<<cs++<<": ";
cout<<ans<<endl;
}
return 0;
}