B - 反正切函數的應用解題報告

B - 反正切函數的應用
Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u

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

這個真不知道說什麼好:

#include <iostream>   

using namespace std;   

int main()   

{   

    long long a,m;   

     cin>>a;   

    for(m=a;m>=1;m--)   

        if((a*a+1)%m==0){   

             cout<<a+a+m+(a*a+1)/m<<endl;   

            return 0;   

         }   

}  





發佈了44 篇原創文章 · 獲贊 8 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章