LeetCode筆記:204. Count Primes

問題:

Count the number of prime numbers less than a non-negative number, n.

大意:

計(jì)算小于非負(fù)數(shù)n的質(zhì)數(shù)個(gè)數(shù)。

思路:

題目很簡(jiǎn)短,就是個(gè)找質(zhì)數(shù)的問題杖虾。

我們知道最簡(jiǎn)單的質(zhì)數(shù)就是2蕊程,3,5殃饿。茄唐。。那怎么計(jì)算往后的質(zhì)數(shù)呢舀锨?質(zhì)數(shù)的定義是除了自己以外沒有任何因子岭洲,也就是不被任何數(shù)整除,也就是說(shuō)坎匿,不會(huì)被這個(gè)數(shù)前面的任何質(zhì)數(shù)和非質(zhì)數(shù)整除盾剩,其實(shí)非質(zhì)數(shù)也可以被質(zhì)數(shù)整除,比如4被2整除替蔬,所以問題可以歸結(jié)為:沒遇到一個(gè)數(shù)告私,判斷它是否能被前面的某一個(gè)質(zhì)數(shù)整除。

要達(dá)到這個(gè)條件进栽,我們需要記錄在遍歷過程中遇到的質(zhì)數(shù)德挣,所以弄了一個(gè)數(shù)組來(lái)記錄遇到過的質(zhì)數(shù),當(dāng)然2快毛、3格嗅、5是一開始就要放進(jìn)來(lái)的,我們遍歷時(shí)也應(yīng)該從2開始唠帝,因?yàn)?和1不是質(zhì)數(shù)屯掖。然后沒遇到質(zhì)數(shù)都記錄下來(lái),同時(shí)遇到的每個(gè)數(shù)都去試一試能不能被前面的質(zhì)數(shù)整除襟衰。

這種做法在數(shù)字不大的情況下是奏效的贴铜,但是當(dāng)數(shù)字大了以后,就會(huì)超時(shí)了瀑晒。還是先看代碼吧绍坝。

代碼(Java):

public class Solution {
    public int countPrimes(int n) {
        int result = 0;
        int num = 3;
        int[] prime = new int[n+3];
        prime[0] = 2;
        prime[1] = 3;
        prime[2] = 5;
        for (int i = 2; i < n; i++) {
            if (i < 6 && i != 4) result ++;
            boolean isPrime = true;
            for (int j = 0; j < num; j++) {
                if (i % prime[j] == 0) isPrime = false;
            }
            if (isPrime) {
                result++;
                prime[num] = i;
                num++;
            }
        }
        return result;
    }
}

他山之石:

public class Solution {
    public int countPrimes(int n) {
        int result = 0;
        boolean[] notPrime = new boolean[n];
        for (int i = 2; i < n; i++) {
            if (notPrime[i] == false) {
                result ++;
                for (int j = 2; j*i < n; j++) {
                    notPrime[j*i] = true;
                }
            }
        }
        return result;
    }
}

這里其實(shí)還是那個(gè)思路,但是加快了速度苔悦,為什么呢轩褐?因?yàn)橹恍枰诿看斡龅劫|(zhì)數(shù)時(shí),將其小于n的倍數(shù)都設(shè)為非質(zhì)數(shù)玖详,這樣就避免了每次遇到一個(gè)數(shù)都要用之前所有質(zhì)數(shù)去除一遍把介,大大降低了時(shí)間復(fù)雜度。

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁(yè)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蟋座,一起剝皮案震驚了整個(gè)濱河市拗踢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌向臀,老刑警劉巖巢墅,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡砂缩,警方通過查閱死者的電腦和手機(jī)作谚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)庵芭,“玉大人妹懒,你說(shuō)我怎么就攤上這事∷海” “怎么了眨唬?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)好乐。 經(jīng)常有香客問我匾竿,道長(zhǎng),這世上最難降的妖魔是什么蔚万? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任岭妖,我火速辦了婚禮,結(jié)果婚禮上反璃,老公的妹妹穿的比我還像新娘昵慌。我一直安慰自己,他們只是感情好淮蜈,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布斋攀。 她就那樣靜靜地躺著,像睡著了一般梧田。 火紅的嫁衣襯著肌膚如雪淳蔼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天裁眯,我揣著相機(jī)與錄音鹉梨,去河邊找鬼。 笑死穿稳,一個(gè)胖子當(dāng)著我的面吹牛俯画,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播司草,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泡仗!你這毒婦竟也來(lái)了埋虹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娩怎,失蹤者是張志新(化名)和其女友劉穎搔课,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體截亦,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爬泥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年柬讨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袍啡。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踩官,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出境输,到底是詐尸還是另有隱情蔗牡,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布嗅剖,位于F島的核電站辩越,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏信粮。R本人自食惡果不足惜黔攒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望强缘。 院中可真熱鬧督惰,春花似錦、人聲如沸欺旧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辞友。三九已至栅哀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間称龙,已是汗流浹背留拾。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲫尊,地道東北人痴柔。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疫向,于是被迫代替她去往敵國(guó)和親咳蔚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)搔驼。 張土汪:刷leetcod...
    土汪閱讀 12,748評(píng)論 0 33
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員)谈火,僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,817評(píng)論 2 36
  • 小學(xué)奧數(shù)其實(shí)很簡(jiǎn)單温技,以下是這六個(gè)部分的知識(shí)點(diǎn)革为! 1 第一部分(知識(shí)點(diǎn)1-6) 2、年齡問題的三個(gè)基本特征: ①兩個(gè)...
    小一哥閱讀 1,325評(píng)論 0 3
  • 近日,朋友圈里捷報(bào)頻傳系任,不少在校好友跟我分享了他們“通過了四級(jí)考試”“考取到了導(dǎo)游證”等諸多好消息恳蹲。可我雖已...
    文夜閱讀 713評(píng)論 0 0
  • 1俩滥,32位設(shè)備上的時(shí)間戳轉(zhuǎn)化 通過13位的字符串時(shí)間戳轉(zhuǎn)化為整型時(shí)嘉蕾,如果在32位的設(shè)備上,會(huì)丟失部分?jǐn)?shù)據(jù)霜旧,造成時(shí)間...
    LX2014閱讀 60評(píng)論 0 0