日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode:Count Primes

發布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode:Count Primes 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem:

Description:

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

Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.

Solution:采用的為埃拉托斯特尼篩法?

算法描述:(來自百度百科)

要得到自然數n以內的全部素數,必須把不大于 的所有素數的倍數剔除,剩下的就是素數。 給出要篩數值的范圍n,找出以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;再用下一個質數,也就是3篩,把3留下,把3的倍數剔除掉;接下去用下一個質數5篩,把5留下,把5的吧倍數剔除掉;不斷重復下去......。 步驟 詳細列出算法如下:
  • 列出2以后的所有序列:
    • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
    標出序列中的第一個素數,也就是2,序列變成:
    • 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
    將剩下序列中,劃掉2的倍數,序列變成:
    • 2 3 5 7 9 11 13 15 17 19 21 23 25
    如果現在這個序列中最大數小于最后一個標出的素數的平方,那么剩下的序列中所有的數都是素數,否則回到第二步。 本例中,因為25大于2的平方,我們返回第二步: 剩下的序列中第一個素數是3,將主序列中3的倍數劃掉,主序列變成:
    • 2 3 5 7 11 13 17 19 23 25
    我們得到的素數有:2,3 25仍然大于3的平方,所以我們還要返回第二步: 現在序列中第一個素數是5,同樣將序列中5的倍數劃掉,主序列成了:
    • 2 3 5 7 11 13 17 19 23
    我們得到的素數有:2,3,5 。 因為23小于5的平方,跳出循環. 結論:2到25之間的素數是:2 3 5 7 11 13 17 19 23。 class Solution { public:int countPrimes(int n) {vector<bool> flags(n-1,true);flags[0]=false;int res;int limit=sqrt(n);for(int i=2;i<=limit;i++){if(flags[i-1]){for(int j=i*i;j<n;j+=i){flags[j-1]=false;}}}for (int j = 0; j < n-1; ++j) {if (flags[j]) ++res;}return res;} };

    ?

    轉載于:https://www.cnblogs.com/xiaoying1245970347/p/4581896.html

    總結

    以上是生活随笔為你收集整理的LeetCode:Count Primes的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。