反正切函式的應用

2021-06-22 23:53:13 字數 1661 閱讀 7759

反正切函式的應用crawling in process...

crawling failed

time limit:1000msmemory limit:10000kb64bit io format:%i64d & %i64u

submit

status

description

反正切函式可展開成無窮級數,有如下公式

使用反正切函式計算pi是一種常用的方法。例如,最簡單的計算pi的方法:

pi=4arctan(1)=4(1-1/3+1/5-1/7+1/9-1/11+...) 公式(2)

然而,這種方法的效率很低,但我們可以根據角度和的正切函式公式:

tan(a+b)=[tan(a)+tan(b)]/[1-tan(a)*tan(b)] 公式(3)

通過簡單的變換得到:

arctan(p)+arctan(q)=arctan[(p+q)/(1-pq)] 公式(4)

利用這個公式,令p=1/2,q=1/3,則(p+q)/(1-pq)=1,有

arctan(1/2)+arctan(1/3)=arctan[(1/2+1/3)/(1-1/2*1/3)]=arctan(1)

使用1/2和1/3的反正切來計算arctan(1),速度就快多了。

我們將公式(4)寫成如下形式

arctan(1/a)=arctan(1/b)+arctan(1/c)

其中a,b和c均為正整數。

我們的問題是:對於每乙個給定的a(1 <= a <= 60000),求b+c的值。我們保證對於任意的a都存在整數解。如果有多個解,要求你給出b+c最小的解。

input

輸入檔案中只有乙個正整數a,其中 1 <= a <= 60000。

output

輸出檔案中只有乙個整數,為 b+c 的值。

sample input

1
sample output

5
一道超級坑的證明題。
1/a=(1-(1/b)*(1/c))/((1/b)+(1/c))=(b+c)/(b*c-1);

令b+c=y,則有c=y-b,代入上式得到:y=(b*b+1)/(b-a).

再令b-a=t,則b=t+a,代入上式有:y=t+(a*a+1)/t+2*a.

由數學知識可知,在不要求t為整數時,當t=sqrt(a*a+1)時,y有最小值,(均值不等式)同時分別在sqrt(a*a+1)呈單調遞減和單調遞增,

因此,可以從sqrt(a*a+1)開始,分別在其左右兩邊尋找使y取最小值的t。因為對稱分布,實際上我們並不需要兩邊尋找,只找一邊即可。

因為為整數所以我們近似的把t=sqrt(a*a+1)看成t=sqrt(a*a)=a;所以以a為最小值向左邊找,找最近的整數。

#include #include #include int main()

}return 0;

}



反正切函式的應用

description 反正切函式可展開成無窮級數,有如下公式 使用反正切函式計算pi是一種常用的方法。例如,最簡單的計算pi的方法 pi 4arctan 1 4 1 1 3 1 5 1 7 1 9 1 11 公式 2 然而,這種方法的效率很低,但我們可以根據角度和的正切函式公式 tan a b t...

反正切函式的應用

time limit 1000ms memory limit 10000k 反正切函式可展開成無窮級數,有如下公式 使用反正切函式計算pi是一種常用的方法。例如,最簡單的計算pi的方法 pi 4arctan 1 4 1 1 3 1 5 1 7 1 9 1 11 公式 2 然而,這種方法的效率很低,但...

1734 反正切函式的應用

2001年noi全國競賽 時間限制 3 s 空間限制 64000 kb 題目等級 大師 master 題解都在圖里 輸入描述 input description 輸入只有乙個正整數a,1 a 60000.輸出描述 output description 乙個整數,為b c 的值 樣例輸入 sample...