pku1183 反正切函数的应用

给出算式{1/a = (1/b + 1/c) / (1 - 1/(b*c)}中的a,求算式中b和c使b+c最小.a,b,c均大于0。

经过一系列的数学推导,可以得到b的范围是{0 < b <= a + sqrt(a^2 + 1)}

又从某OIer的博客中看到令f(b)= b + c

即f(b)=b + (ab + 1) / (b - a)

求导得到f(b)' = 1 - (a^2 + 1) / (b - a)^2,

在区间(a, a + sqrt(a^2 + 1))上恒小于0,所以f(b)单调递减。

View Code
 1 program pku1183(input,output);
2 var
3 x,y : int64;
4 begin
5 readln(x);
6 y:=x+trunc(sqrt(x*x+1));
7 while true do
8 begin
9 if ((x*y+1) mod (y-x)=0) then
10 begin
11 writeln(y+((x*y+1) div (y-x)));
12 break;
13 end;
14 dec(y);
15 end;
16 end.



posted @ 2012-03-21 16:32  Codinginging  阅读(138)  评论(0编辑  收藏  举报