NOI 2001 反正切函式的應用
NOI 2001 反正切函式的應用
題目背景
反正切函式可展開成無窮級數,有如下公式
\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)n**x2n+1(0≤x≤1)(1)
使用反正切函式計算 是一種常用的方法。例如,最簡單的計算 的方法:
\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}π
然而,這種方法的效率很低,但我們可以根據角度和的正切函式公式:
\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(\frac{p + q}{1 - p q}) \tag{4}arctan(p)+arctan(q)=arctan(1−pq
利用這個公式,令 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<b\le 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\n",ans);
return 0;
}