当前位置: 代码迷 >> 综合 >> POJ - 1183 反正切函数的应用(数论)
  详细解决方案

POJ - 1183 反正切函数的应用(数论)

热度:94   发布时间:2023-11-25 08:02:17.0

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整除时,结束循环 xsqrt(x)0xi

#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;
}