C語言求冪的三種方法

2021-10-19 05:15:19 字數 878 閱讀 3876

直接對x乘y次

int

result

(int x,

int y)

return num;

}

這種方法有手就行,但是執行時間往往過長

主要利用遞迴,它的思想類似於分治,把大問題分割為小問題,再將小問題的結果合計為大問題的解

t 4=

t2+t

2t^=t^+t^

t4=t2+

t2所以我們可以對冪指數進行不斷的二分,達到降低時間複雜度的效果

int

result

(int x,

int y)

當冪指數y為奇數時,還要乘一次自身

假設指數為7,可寫為

7 =2

2+21

+20其

二進位制形

式為

111,且每

一位都等

於前一位

的平

方7=2^+2^+2^ 其二進位制形式為111,且每一位都等於前一位的平方

7=22+2

1+20

其二進位制

形式為1

11,且

每一位都

等於前一

位的平方

long

long

qpow

(int base,

int p)

tmp=

(tmp*tmp)

;//自乘

p=p>>1;

//訪問下一位

}return ans;

}

再此方法下,時間複雜度最低

求素數的三種方法

具體篩法是 先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5整除的數都劃去。這樣一直做下去,就...

求Fibonacci數列的三種方法

fibonacci數列 0,1,1,2,3,5,8,13。第一招 遞推法 includeint f 47 int main 第二招 不斷變換初始 include int main if n 1 n 2 puts 1 else if n 0 puts 0 else printf d n f3 retu...

c 逆序的三種方法

include using namespace std include int main for int i 0 i len i 方法2 char p input len 1 for int i 0 i len i cout endl 方法三 for int i 0 i len i system p...