在1~n
中,能被
2整除的有
n/2個,能被
3整除的有
n/3個,……
則該演算法的複雜度可這樣計算:
o(n)=n/2×
1+n/3
×2+n/5
×3+n/7×4+
…… //即o(n)~n
×φ(n)
考慮到6這個數,它既是2的倍數,也是3倍數,
因此還要用到容斥原理。
//設能被第
i個素數整除的正整數的集合為ai。
對於特定的乙個整數k
,該演算法一定是在取得其最小的素因數,或者其本身是個素數時
break
出第二層迴圈。
對於6這個例子,我們要把他當有
3這個因子的情況去掉。
考慮30
,他的質因數有2,
3,5,我們需要減去3,
5這兩種情況。
注:我們在計算(2,3
)這一組時,對
30減去
3這種情況,(2,
5)這一組減去
5這種情況,(3,
5)又減了一次
5這種情況,因此要加(2,
3,5)這一組的計算結果。只能說類似容斥原理。
不妨設cnt=
φ(n)
pi為第i個素數
因此由容斥原理可得:
計算複雜度
求極限 n 無窮大 表示式n 無窮大 表示式1 n 0 2n2 2n3 n n 3 2 n 2 1 n 2 n 無窮大的時候 2 n 0 1 n 2 0 2 常數 此演算法的時間複雜度是n 3 時間複雜度的概念 執行的次數和同數量級 n最高次方數 取商是常數 那麼同數量級就是這個演算法的時間複雜度 ...
計算時間複雜度與空間複雜度
如何衡量乙個演算法的好壞?複雜度 空間複雜度 時間複雜度 事後統計法 就是在演算法的程式執行結束後,根據實際執行結果衡量演算法好壞 事前估計法 就是在程式執行之前,先按照程式 來預估演算法的好壞 時間複雜度 用基本指令的執行次數而不是執行時間代表時間複雜度,同乙個程式在不同配置的機器下的執行時間不一...
時間複雜度和空間複雜度計算
時間複雜度 首先要說的是,時間複雜度的計算並不是計算程式具體執行的時間,而是演算法執行語句的次數。當我們面前有多個演算法時,我們可以通過計算時間複雜度,判斷出哪乙個演算法在具體執行時花費時間最多和最少。常見的時間複雜度有 常數階o 1 對數階o log2 n 線性階o n 線性對數階o n log2...