描述
反正切函数可展开成无穷级数,有如下公式
arctan(x)=n=0∑∞2n+1(−1)nx2n+1(0≤x≤1)(1)
使用反正切函数计算 是一种常用的方法。例如,最简单的计算 的方法:
π=4arctan(1)
=4(1−31+51−71+91−111+…)(2)
然而,这种方法的效率很低,但我们可以根据角度和的正切函数公式:
tan(α+β)=1−tan(α)tan(β)tan(α)+tan(β)(3)
通过简单的变换得到:
arctan(p)+arctan(q)=arctan(1−pqp+q)(4)
利用这个公式,令 p=21,q=31,则 1−pqp+q=1,有
arctan(21)+arctan(31)=arctan(1−21⋅3121+31)=arctan(1)
我们将公式 4 写成如下形式
arctan(a1)=arctan(b1)+arctan(c1)
其中 a,b,c∈N+。
我们的问题是:对于每一个给定的 a,求 b+c 的值。我们保证对于任意的 a 都存在整数解。如果有多个解,要求你给出 b+c 最小的解。
输入描述
输入文件中只有一个正整数 a。
输出描述
输出文件中只有一个整数,为 b+c 的值。
样例输入 1
1
样例输出 1
5
提示
数据范围与提示
1≤a≤6×104。
时间限制: 1000MS 内存限制: 64MB 分数:100
#include <stdio.h>
using namespace std;
int main() {
unsigned long a,i;
scanf("%ld",&a);
for(i=a;;i--)
if((a*a+1)%i==0)
break;
printf("%ld",2*a+(a*a+1)/i+i);
return 0;
}
难度:中等+
AC代码,至少都得将题目描述看懂吧,别看那一串字符就不答了,仔细想想,还是简单的~