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.