如何設計演算法計算一個超長數列的和?
對於數列求和,n屬於自然數,在n非常大的情況下怎麼才能得到一個較為精確的值?例如n最大取值到,怎麼才能得到一個較為精確的解。在這兒有個小小的要求,就是不能採用歐拉公式來計算。
多謝了!
題主在其他回答下面的評論:
的確不大,其實這道題目來源自《民科》貼吧,裡面有個人認為這個數列會收斂到400,而且這個人只認純累加計算,不認其它方法,我想算的超過400。其實用maple很容易計算,但是maple內部肯定是用歐拉公式之類實現的近似計算,肯定不是純累加算出來的,否則不可能那麼快啊!
我覺得解決方法就是別去民科貼吧。問題你也看出來了
- 你在跟傻逼討論
- 對方把你能用的工具限定在傻逼能懂的範圍內
這不就是著名的跟傻逼辯論,智商被拉到傻逼的程度,然後對方用豐富的經驗擊敗你嗎?
重要的事情要說三遍:別去民科貼吧!別去民科貼吧!
然後回到你的問題,你知道那個和大約等於ln n,所以如果你要跟這個民科吵,你就要找一個n使得ln n&>&>400。這也就是n &>&> e^400 ≈ 10^173。
所以你保險起見得找個n=10^200以上的數字,才能讓加出來的和明顯大於400……我建議你別跟這人辯論了,真的。
EDIT:補充一下,你的電腦的計算能力大約是10^9每秒,如果你能高效利用向量化和多核的話可以分別提升一個數量級,如果你能高效利用GPU的話也可以直接提升兩個數量級(但是和前面的CPU優化不疊加)。然後你把一秒換成一天可以提升5個數量級,把一天換成你的一輩子可以再提升4個數量級。你砸錢上超級計算機大約可以提升0-7個數量級不等(取決於你的錢數)。
然而你面臨的問題如果是10^173這個量級的,請三思……回到原來的10^20的問題的話也請按照上面的討論估計一下,你打算花多少技術,多少時間和多少錢來湊夠20這個指數。N=10^10的時候,需要17秒(i5+4G內存,Surface Pro 1)
N=10^20的時候,需要5400年
但是可以通過並行運算減少時間,如果你確實需要一個精確的結果的話。用54000台電腦,大概用1個半月即可。還是能接受的。如何設計演算法計算的和,比如說?如何得到一個比較精確的解?這兒有一個小小的要求,就是不希望使用等比數列求和公式之類的取巧方法來計算。請用直接的累加堂堂正正地求出答案!
精度根本不是問題,寫個高精度保留幾十位小數很容易的。
關鍵是,你想要循環10^20次,這是萬萬行不通的,這麼多次怎麼也得幾千年才能跑完。所以還是代公式,或者拿積分估計一下吧。比如,你要保留7位小數的話,那麼可以用來估計,誤差不超過。
因此,你只要算10^8之內的和就可以了。由於double至少有15~16位的精度,經過10^8次累加仍然有7位有效數字是沒問題的。所以,用不著高精度。直接寫一個循環,用double從1/1加到1/10^8,再加上12ln(10),就行了。(一些細節不保證準確,請自行驗證。)你把歐拉公式的證明過程給他寫一遍,就說是自己發現的。
我猜他應該並不知道是歐拉公式。
(?? . ??)如果數列的和收斂的話,看《A=B》
計算機最小浮點數是多少
推薦閱讀:
※如何解答這道關於數論的題目?
※傅立葉級數和傅立葉變換是什麼關係?
※a0,a1,a2,...a(n-1)是整數,求證,行列式det(ak的t次方)(0=<k,t<=n-1)能被∏s!(s從1到n-1)整除?
※隨機變數的矩和高階矩有什麼實在的含義?
※拓撲量子計算的前景?