[NOI2001] 反正切函数的应用
题目背景
反正切函数可展开成无穷级数,有如下公式
arctan ( x ) = ∑ n = 0 ∞ ( − 1 ) n x 2 n + 1 2 n + 1 ( 0 ≤ x ≤ 1 ) (1) \arctan(x) = \sum_{n = 0}^\infty \frac{(-1) ^ n x ^ {2n + 1}}{2n + 1} ( 0 \le x \le 1 ) \tag{1} arctan(x)=n=0∑∞2n+1(−1)nx2n+1(0≤x≤1)(1)
使用反正切函数计算 是一种常用的方法。例如,最简单的计算 的方法:
π = 4 arctan ( 1 ) = 4 ( 1 − 1 3 + 1 5 − 1 7 + 1 9 − 1 11 + … ) (2) \begin{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} \tag{2} π=4arctan(1)=4(1−31+51−71+91−111+…)(2)
然而,这种方法的效率很低,但我们可以根据角度和的正切函数公式:
tan ( α + β ) = tan ( α ) + tan ( β ) 1 − tan ( α ) tan ( β ) (3) \tan(\alpha + \beta) = \frac{\tan(\alpha) + \tan(\beta)}{1 - \tan(\alpha) \tan(\beta)} \tag{3} tan(α+β)=1−tan(α)tan(β)tan(α)+tan(β)(3)
通过简单的变换得到:
arctan ( p ) + arctan ( q ) = arctan ( p + q 1 − p q ) (4) \arctan(p) + \arctan(q) = \arctan(\frac{p + q}{1 - p q}) \tag{4} arctan(p)+arctan(q)=arctan(1−pqp+q)(4)
利用这个公式,令 $ p = \frac{1}{2}, q = \frac{1}{3} $,则 $ \frac{p + q}{1 - p q} = 1 $,有
arctan ( 1 2 ) + arctan ( 1 3 ) = arctan ( 1 2 + 1 3 1 − 1 2 ⋅ 1 3 ) = arctan ( 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)
题目描述
我们将公式 $ 4 $ 写成如下形式
arctan ( 1 a ) = arctan ( 1 b ) + arctan ( 1 c ) \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 a a,求 $ b + c $ 的值。我们保证对于任意的 $ a $ 都存在整数解。如果有多个解,要求你给出 $ b + c $ 最小的解。
输入格式
输入文件中只有一个正整数 $ a $。
输出格式
输出文件中只有一个整数,为 $ b + c $ 的值。
样例 #1
样例输入 #1
1
样例输出 #1
5
提示
$1 \le a \le 6\times 10^4 $。
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容