Q&A

ML

算法題

flags = [True] * (n + 1)
primes = []
pnum = 0
for i in range(2, n):
    if flags[i]:
        pnum += 1
        primes.append(i)
    for j in range(pnum):
        ind = primes[j] * i 
        if ind > n:
            break
        flags[ind] = False
        if i % primes[j] == 0:
            break

任意一個合數(shù)均可以表示為素數(shù)的乘積n=p_1*p_2*...* p_k, p_1\le p_2\le p_k,線性篩法確保一個合數(shù)由其最小的因子來消除,這樣可以確保其只被標記一遍。上述代碼中,一個數(shù)k表示為k=primes[j] * i, 由于primes數(shù)組是有序的,故可以確保k是被其最小因子消除的;當i有一個因子為primes[j]時,就不能繼續(xù)標記了,因為primes中接下來的質(zhì)數(shù)肯定比i的因子大,就不符合標記準則了。比如k=90, primes[j]=3, i = 2 * 3 * 5 = 30時就不標記,直到在primes[j]=2, i = 3 * 3 * 5 = 45,這樣就解決了重復標記的問題;
時間復雜度分析:因為避免了重復標記問題,所以標記操作總共為O(n),單次循環(huán)平均為O(1);外層循環(huán)復雜度為O(n)。所以總體復雜度為O(n);
Eratosthenes篩法(埃式篩法)時間復雜度分析

調(diào)和級數(shù)
調(diào)和級數(shù)部分和

數(shù)學

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容