直接對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...