#include<bits/stdc++.h>
using namespace std;
int a1,b1,l,a2,b2,eps;
int gcd(int a ,int b){
if(b==0)return a;
return gcd(b,a%b);
}
void erfen(int ee,int l,int r){
while(l<=r){
int mid=(l+r)>>1;
double kep=1.0f*ee/mid;
if(kep-eps>=0){
double kps=1.0*a2/b2;
int k=gcd(ee,mid);
if(kps>=kep){
a2=ee/k;
b2=mid/k;
}
l=mid+1;
}
else
r=mid-1;
}
return;
}
int main(){
scanf("%d %d %d",&a1,&b1,&l);
a2=l,b2=1;
eps=1.0f*a1/b1;
for(int i=1;i<=l;++i)
erfen(i,1,l);
printf("%d %d",a2,b2);
return 0;
}
有没有别的二分解法的代码?或者帮我改改。不写暴力主要是想练练二分。