小红的函数最大值
[题目链接](https://www.nowcoder.com/practice/ef7f1d579daa4d349abd120a70b708e8)
思路
给定正整数 和
(
,
),求函数
在定义域
上的最大值。
求导找驻点
对 求导:
$$
令 ,解得:
$$
由于 ,所以
,因此
,确实在定义域内。
验证极大值
对 求二阶导数:
$$
因为 ,所以
对所有
成立,说明
是上凸函数,驻点
处取到全局最大值。
代入计算
将 代入原函数:
$$
直接按公式计算即可。注意 ,编程时使用自然对数
进行换底。
样例演示
输入 :
与预期输出 一致。
复杂度分析
- 时间复杂度:
,只需常数次浮点运算。
- 空间复杂度:
,只用常数额外空间。
代码
#include <cstdio>
#include <cmath>
using namespace std;
int main() {
int a, b;
scanf("%d %d", &a, &b);
double lna = log((double)a);
double x = 1.0 / (b * lna);
double ans = log(x) / lna - b * x;
printf("%.10f\n", ans);
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
double lna = Math.log(a);
double x = 1.0 / (b * lna);
double ans = Math.log(x) / lna - b * x;
System.out.printf("%.10f%n", ans);
}
}

京公网安备 11010502036488号