zoukankan      html  css  js  c++  java
  • NOI 2001 反正切函数的应用

    NOI 2001 反正切函数的应用

    洛谷传送门

    题目背景

    反正切函数可展开成无穷级数,有如下公式

    arctan(x) = sum_{n = 0}^infty frac{(-1) ^ n x ^ {2n + 1}}{2n + 1} ( 0 le x le 1 ) ag{1}arctan(x)=n=0∑∞2n+1(−1)n**x2n+1(0≤x≤1)(1)

    使用反正切函数计算 是一种常用的方法。例如,最简单的计算 的方法:

    egin{aligned} pi & = 4 arctan(1) & = 4(1 - frac{1}{3} + frac{1}{5} - frac{1}{7} + frac{1}{9} - frac{1}{11} + dots) end{aligned} ag{2}π=4arctan(1)=4(1−31+51−71+91−111+…)(2)

    然而,这种方法的效率很低,但我们可以根据角度和的正切函数公式:

    an(alpha + eta) = frac{ an(alpha) + an(eta)}{1 - an(alpha) an(eta)} ag{3}tan(α+β)=1−tan(α)tan(β)tan(α)+tan(β)(3)

    通过简单的变换得到:

    arctan(p) + arctan(q) = arctan(frac{p + q}{1 - p q}) ag{4}arctan(p)+arctan(q)=arctan(1−pqp+q)(4)

    利用这个公式,令 p = frac{1}{2}, q = frac{1}{3}p=21,q=31,则 frac{p + q}{1 - p q} = 11−pqp+q=1,有

    arctan(frac{1}{2}) + arctan(frac{1}{3}) = arctan(frac{frac{1}{2} + frac{1}{3}}{1 - frac{1}{2} cdot frac{1}{3}}) = arctan(1)arctan(21)+arctan(31)=arctan(1−21⋅3121+31)=arctan(1)

    题目描述

    我们将公式 44 写成如下形式

    arctan(frac{1}{a}) = arctan(frac{1}{b}) + arctan(frac{1}{c})arctan(a1)=arctan(b1)+arctan(c1)

    其中 a, b, c in mathbb{N^+}a,b,c∈N+。

    我们的问题是:对于每一个给定的 aa,求 b + cb+c 的值。我们保证对于任意的 aa 都存在整数解。如果有多个解,要求你给出 b + cb+c 最小的解。

    输入格式

    输入文件中只有一个正整数 aa

    输出格式

    输出文件中只有一个整数,为 b + cb+c 的值。


    题解:

    题解推的好麻烦啊。

    利用一个性质:(a<ble c)

    然后可以推出来(c=frac{ab+1}{b-a}),所以b的枚举范围就确定了下来。

    最后只要枚举到头就好。

    代码:

    #include<cstdio>
    #define int long long
    using namespace std;
    int a,b,ans;
    signed main()
    {
    	scanf("%lld",&a);
    	for(b=a+1;b*(b-a)<=a*b+1;b++)
    		if((b*b+1ll)%(b-a)==0)
    			ans=(b*b+1ll)/(b-a);
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    Apache TomEE 入门指南
    Windows 7运行命令大全
    hibernate hql 大全
    maven常用命令
    php编译安装php-5.6
    nginx编译安装
    apache通过AD验证
    apache编译安装 httpd 2.2 httpd 2.4
    DC 辅域转主域
    tomcat安装配置
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13971124.html
Copyright © 2011-2022 走看看