C 不用遞迴,寫出快速求冪的程式

2021-10-24 01:49:09 字數 900 閱讀 6844

剛解完2.15這道題([c]證明x的62次方可以只用8次乘法算出)往下看就發現了這個,直接貼上我解2.15這道題的時候的出現的一種解法就行了,而且演算法恰好滿足2.16和2.17的要求。

程式如下:

//used用來累計使用乘法的次數

#include

#include

#define number 2

#define p 62

int used =0;

//62=32+16+8+4+2

long

longp(

long

long x,

int in)

}while

((in >>=1)

&&((x *

= x),(

++used),1

));//這裡while內的乘法也被計入

return number;

}int

main()

演算法很簡短,計算速度很快,也不占用空間,主要依靠冪的最右邊的二進位制位是否為1來判斷是否相乘從而使冪相加(同底數冪相乘,底數不變,指數相加),使得冪最終達到62,算出n^62次方的值。

tip:(x *= x)之所以不寫在迴圈體內,是因為這樣可以減少掉最後使那一次無意義的乘法

通過計算器可知結果是對的,該演算法只需要十步

C程式 快速冪

1 給定三個正整數 a,b,c a typedef long long ll ll pow ll a,ll b,ll m class mathcode src b 這裡要使用快速冪的思想,它基於二分的思想,因此也稱為二分冪。如果b是奇數,那麼有 如果b是偶數,那麼有 顯然,b是奇數的情況下總可以在下...

求冪的遞迴和非遞迴實現

遞迴版本的實現 long long int pow1 int x,unsigned int n if n 0x01 else return pow x x,n 1 遞迴 的基準條件是 n 0 此時返回1 不呼叫自身 若n是偶數,則x的n次方等於 x x的n 2次方。若n是奇數,則x的n次方等於 x ...

快速冪非遞迴實現(即求x的n次方)

如果用遞迴的方法求冪,可以是這樣的 double pow double x,unsigned int n 注意 n若為乙個奇數,那麼它對應的二進位制最後一位一定是1,與上1最終一定是1 上面的n為非負,如果要求負數次冪,可以先求正數次冪再用1除之 上述方法雖然簡單,但是效率並不高.因為函式呼叫的代價...