POJ - 1183 反正切函数的应用
由 题 目 可 知 : 由题目可知: 由题目可知:
( p + q ) / ( 1 ? p q ) = 1 / a , (p+q)/(1?pq)=1/a, (p+q)/(1?pq)=1/a,
其 中 p = 1 / b , q = 1 / c 其中p=1/b,q=1/c 其中p=1/b,q=1/c
即 1 / a = ( b + c ) / ( b c ? 1 ) 即 1 / a = ( b + c ) / ( b c ? 1 ) 即1/a=(b+c)/(bc?1)即1/a=(b+c)/(bc?1) 即1/a=(b+c)/(bc?1)即1/a=(b+c)/(bc?1)
由 上 式 可 得 , c = ( a b + 1 ) / ( b ? a ) , 那 么 b + c = b + ( a b + 1 ) / ( b ? a ) 由上式可得,c=(ab+1)/(b?a),那么b+c=b+(ab+1)/(b?a) 由上式可得,c=(ab+1)/(b?a),那么b+c=b+(ab+1)/(b?a)
我们将ab去掉
b + c = b+c= b+c= b + a b / ( b ? a ) + 1 / ( b ? a ) = b+ab/(b?a)+1/(b?a)= b+ab/(b?a)+1/(b?a)=
b + ( a b + a ? a ? a ? a ) / ( b ? a ) + 1 / ( b ? a ) b+(ab+a?a?a?a)/(b?a)+1/(b?a) b+(ab+a?a?a?a)/(b?a)+1/(b?a)
b + a + ( a ? a + 1 ) / ( b ? a ) b+a+(a?a+1)/(b?a) b+a+(a?a+1)/(b?a)
所 以 就 是 b + c = b + a + ( a ? a + 1 ) / ( b ? a ) 所以就是b+c=b+a+(a?a+1)/(b?a) 所以就是b+c=b+a+(a?a+1)/(b?a)
求 b + c b+c b+c的最小值
因为右边只有一个自变量b,所以设 x = b ? a x=b-a x=b?a
f ( x ) = x + ( a ? a + 1 ) / x + 2 ? a f(x)=x+(a*a+1)/x+2*a f(x)=x+(a?a+1)/x+2?a
即 当 x < = s q r t ( a ? a + 1 ) 时 , b + c 能 取 到 最 小 值 即当x<=sqrt(a*a+1)时,b+c能取到最小值 即当x<=sqrt(a?a+1)时,b+c能取到最小值
函 数 值 x 从 s q r t ( x ) 到 0 逐 渐 减 少 , 符 合 x 被 i 整 除 时 , 结 束 循 环 函数值x从sqrt(x)到0逐渐减少,符合x被i整除时,结束循环 函数值x从sqrt(x)到0逐渐减少,符合x被i整除时,结束循环
#include<cstdio>
#include<cmath>
int main()
{
long long a;while(scanf("%lld",&a)!=EOF){
long long x=a*a+1;for(int i=sqrt(x);i>0;i--){
if(x%i==0)//能被整除的时候,x/i为整数 {
printf("%lld\n",i+x/i+2ll*a);break;}}}return 0;
}