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

POJ - 1183 反正切函数的应用

由 题 目 可 知 : 由题目可知:
( p + q ) / ( 1 − p q ) = 1 / a , (p+q)/(1−pq)=1/a, (p+q)/(1pq)=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)/(bc1)1/a=(b+c)/(bc1)
由 上 式 可 得 , 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)/(ba)b+c=b+(ab+1)/(ba)

我们将ab去掉

b + c = b+c= b+c= b + a b / ( b − a ) + 1 / ( b − a ) = b+ab/(b−a)+1/(b−a)= b+ab/(ba)+1/(ba)=
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+aaaa)/(ba)+1/(ba)
b + a + ( a ∗ a + 1 ) / ( b − a ) b+a+(a∗a+1)/(b−a) b+a+(aa+1)/(ba)
所 以 就 是 b + c = b + a + ( a ∗ a + 1 ) / ( b − a ) 所以就是b+c=b+a+(a∗a+1)/(b−a) b+c=b+a+(aa+1)/(ba)

b + c b+c b+c的最小值

因为右边只有一个自变量b,所以设 x = b − a x=b-a x=ba

f ( x ) = x + ( a ∗ a + 1 ) / x + 2 ∗ a f(x)=x+(a*a+1)/x+2*a f(x)=x+(aa+1)/x+2a
即 当 x < = s q r t ( a ∗ a + 1 ) 时 , b + c 能 取 到 最 小 值 即当x<=sqrt(a*a+1)时,b+c能取到最小值 x<=sqrt(aa+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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wa_Automata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值