看似簡單的求R n

2021-09-30 03:07:31 字數 998 閱讀 4247

求出r^n其中r為實數 0.0 < r < 99.999  n是乙個整數 n<=25

大家很容易想到,這還不容易麼?可是如果要求最精確的結果呢?就是說小數點之後有多少輸出多少...並且計算時間不多於1s...是的,這是一道acm的試題

我暫時沒有考慮精確度的問題,感覺陷阱在1sec上面,於是沒有敲出來**就開始想,可能這是個壞習慣...如果僅僅是r*r*r.....這樣豈不是一道白吃的問題?於是想了好久找到如下解決r^n的節省資源的優化辦法...

1劃分法

a^n = (a^(n/2))^2 n是奇數

a^n = a*a^(n-1)   n是偶數

例子:普通演算法:

2*2*2*2*2*2*2*2 ~~ 8 次乘法  時間複雜度~~ o(n).

劃分法:

2^8 == (a^4)^2 == ((a^2)^2)^2 ~~ 3 次乘法 時間複雜度~~ o(log n).

o(log n) is much faster than o(n).  :)

long square(long n) 

long fastexp(long base,long power)

2公式法

a^n = exp(log(a)*n)    pow(a,n)

code:

#include

#include

void main()

但是似乎本題的目的也不在於此 要計算出那麼多的位數恐怕不是普通的資料型別能夠辦到的 在學資料結構最基礎的陣列的時候 曾經有乙個例子 用陣列求大數的冪 看來此處可能用得到

那之前的努力白費了麼?當然沒有...起碼我們知道了以後有這種計算的時候如何節省記憶體和cpu了。。。

待續...

ps:如果有人知道更簡便的方法或者用普通資料型別就能解決的麻煩指點我一下 我很笨地:)

參考資料:

看似簡單的a b

輸入兩個整數a和b,計算a b的和 注意此題是多組測試資料 這道題的難點就在多組測試資料,如果是一組資料那麼乙個scanf 函式就可以解決,但是這道題要求的是多組資料,那麼就要再用乙個while 函式讓它迴圈,如下 include intmain return0 關於 的作用 1 在windows下...

誕生272年後,這個看似簡單的數學問題終求得閉式解

德國數學家 ingo ullisch 破解誕生 270 多年的 山羊問題 求出閉式解。我們先來看乙個 簡單 的問題 假如圓形籬笆圍出一英畝草地,將乙隻山羊拴在籬笆內,你需要用多長的繩子才能讓羊吃到半英畝的草?這看起來像高中幾何題,但事實上 270 多年來,許多數學家和數學愛好者都在思考這個問題及其不...

區間DP例題總結 看似不簡單的簡單題

今天,我們開始學那奇怪的區間dp。簡單來說,區間dp分為三個部分 階段列舉左端點,再列舉右端點 策略 顧名思義就是因為有些題,需要求出中點k,但有些題卻又不需要。所以我們應該判斷,用與不用。現在我們來看幾道經典例題 n堆石子擺成一條線。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成...