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