A 清楚姐姐学信息论
题意
给出\(a,b\),问当\(a,b\)的值为多少时\(a^b>b^a\)
思路
\(a^b>b^a\)
\(blna>alnb\)
\(\frac{lna}{a}>\frac{lnb}{b}\)
令\(f(x) = \frac{lnx}{x}\)
\(f'(x) = \frac{1-lnx}{x^2}\)
令\(f'(x)=0\)
\(x=e\)
当\(0<x<e\)时\(f'(x)>0\)
当\(x>e\)时\(f'(x)<0\)
\(f(x)在(0,e)单调递增,在(e,+\infty)单调递减\),极大值\((e,\frac{1}{e})\)
- 有三种情况
- \(a>e\),\(b>e\) ->单调递减->min(a,b)
- \(a<e\),\(b<e\) ->单调递增->max(a,b)
- \(min(a,b) < e\) , \(max(a,b) > e\)
由于题目范围\(2\le a,b \le 10^9\)
只需讨论\(min(a,b)=2\)即可
即当\(2<max(a,b)<=4\) ->\(2\)
当\(max(a,b)\ge >4\) ->\(max(a,b)\)
代码
点击查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
#define X first
#define Y second
typedef long long LL;
const char nl = '\n';
const int N = 1e6+10;
int n,m;
void solve(){
int a,b;
cin >> a >> b;
if(a > 2 && b > 2)cout << min(a,b);
else if(a == 2 && b == 2)cout << 2;
else{
if(max(a,b) < 4)cout << max(a,b);
else cout << min(a,b);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
}