HDU6624(輾轉相除法)

題目鏈接
思路來源

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
// p/x<b/c<p/(x-1)
//傳參數代表的值 
void solve(ll pa,ll pb,ll qa,ll qb,ll &x,ll &y){
	ll z=(pa+pb-1)/pb;//得到向上整除的部分 
	if(z<=qa/qb){
		x=z,y=1;
		return;
	} 
	pa-=(z-1)*pb,qa-=(z-1)*qb;
	solve(qb,qa,pb,pa,y,x);//對整個式子取倒數 
	x+=(z-1)*y;
}

int main(){
	int t;
	cin>>t;
	ll p,a,x,y;
	while(t--){
		scanf("%lld%lld",&p,&a);
		solve(p,a,p,a-1,x,y); 
		printf("%lld/%lld\n",x*a-p*y,x);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章