连分数乱搞,我反正是一眼没看出结果
某巨巨把这题讲解的比较详细 : http://blog.csdn.net/gogdizzy/article/details/8727386
令k = [a/b] 然后对于a/b < p/q < c/d 就能得到 (a-bk)/b < (p-qk)/q < (c-dk)/d 即 a'/b < p'/q < c'/d ----------------------每项都是<1的
因为显然 a/b < 1 这时如果c/d>1,那么最终结果p = q = 1 也显然的
如果c/d<=1,我们把原不等式倒数一下 ,只需要求 d/c < q/p < b/a 然后就能递归求解满足上式了
因为 d/c < q/p 所以 q > d*p/c 所以 q = q * d / c + 1
最后因为 p > q * a / b 所以 p = q * a / b + 1
LL dfs(LL a , LL b , LL c , LL d) { LL k = a/b; a = a-b*k; c = c-d*k; if(c > d) return 1; return d*dfs(d,c,b,a)/c+1; } int main() { //freopen("in.txt","r",stdin); LL a,b,c,d; while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&d)) { LL q = dfs(a,b,c,d); printf("%lld/%lld ",a*q/b+1,q); } return 0; }