题意:根据X^(eY) == (eY)^ 求解X,使得满足该等式:
(1)首先等式两边同时取对数:eYln(x)=xln(eY);
(2)继续化简:eYln(x)=x(1+ln(Y));
根据上面推导的等式利用二分算法进行求解。
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;
const double esp=1e-7;
const double e=2.718281828459;
const int inf=0x3f3f3f3f;
int Equal_1(double x,double y){if(log(x)*(y*e)>(1+log(y))*x){return 1;}return 0;
}
int Equal_2(double x,double y){if(log(x)*(y*e)<(1+log(y))*x){return 1;}return 0;
}
int main(){double y;while(scanf("%lf",&y)!=EOF){double left=1,right=e;double ans=0;while((right-left)>esp){double mid=(left+right)/2;if(Equal_1(mid,y)){right=mid;}else{left=mid;}}if(y==1){printf("%.5lf\n",(left+right)/2);}else if(y>1){ans=(left+right)/2;left=e,right=inf;while((right-left)>esp){double mid=(left+right)/2;if(Equal_2(mid,y)){right=mid;}else{left=mid;}}printf("%.5lf %.5lf\n",ans,(left+right)/2);}}return 0;
}