Poj 4227 反正切函式的應用

2021-09-08 15:09:31 字數 1569 閱讀 3489

description

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

(當中0 <= x <= 1) 公式(1)

使用反正切函式計算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/b+1/c)/1-(1/a*(1/b))的情況下,要求最小的a+b,每個例子給定a。假設我們列舉b和c的話。時間消耗不起。我們自然想到把b,c表示為和a相關的等式。顧設b=a+m,c=a+n,帶入上式化簡得(a*a+1)=m*n。如今僅僅要逆序列舉m或者n就能夠了。

ac**例如以下:

///@zhangxiaoyu

///2015/8/13

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

int main()

ll ans;

ans=i+(a*a+1)/i+2*a;

printf("%lld\n",ans);

}return

0;}

反正切函式的應用

反正切函式的應用crawling in process.crawling failed time limit 1000msmemory limit 10000kb64bit io format i64d i64u submit status description 反正切函式可展開成無窮級數,有如下...

反正切函式的應用

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 然而,這種方法的效率很低,但...