hdu 5584 LCM Walk(數學)
阿新 • • 發佈:2018-12-16
一個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; }