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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 204. Count Primes

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

注:質數從2開始,2、3……

?

改進過程:

一、常規思路是對小于n的每一個數進行isPrime判斷,isPrime(int x)函數中for(int i = 2; i <= x /2; ++i),如果x%i==0,return false。

二、將isPrime(int x)中i的范圍改為i * i <= x。不用i <= sqrt(x),因為sqrt耗時。

三、isPrime中把是2、3、5倍數的數直接return,不進入for循環。

四、對于每一個數p,p2、p2+p、p2+2p……均不為素數,有點像動態規劃的思想。此時可以不用isPrime(int x)函數,而是維護一個isPrime[n]的bool數組,先設里面所有的值均為true,然后i從3開始循環(對應的是如果輸入n<3,直接return 0)。因為會把i2之后的一系列數在isPrime數組中的值變為false,因此i循環至i * i < n。

關于if(!isPrime[i]) continue;這一句解釋一下。如果isPrime[i] == false,那么也就是說在之前的i循環里被標記過了。設之前的循環的數為p,那么 i = p2?+ np,如果沒有continue這一句的話,那么 j = i * i,設j也等于p2 + mp,于是得到等式 (p2?+ np)2 = p2?+ mp,解得m = p((p + n)2 - 1),也就是說j之前在p循環時已經被標記過了,因此可以直接continue,節省時間。以下是代碼,也是題目提示中給出的最優代碼。

1 public int countPrimes(int n) { 2 boolean[] isPrime = new boolean[n]; 3 for (int i = 2; i < n; i++) { 4 isPrime[i] = true; 5 } 6 // Loop's ending condition is i * i < n instead of i < sqrt(n) 7 // to avoid repeatedly calling an expensive function sqrt(). 8 for (int i = 2; i * i < n; i++) { 9 if (!isPrime[i]) continue; 10 for (int j = i * i; j < n; j += i) { 11 isPrime[j] = false; 12 } 13 } 14 int count = 0; 15 for (int i = 2; i < n; i++) { 16 if (isPrime[i]) count++; 17 } 18 return count; 19 }

五、在最后計算cnt時,從2開始到n-1都被判斷了一遍,但是偶數絕對不是素數,因此是沒必要訪問其在數組isPrime中的值的。

既然計算cnt時可以跳過偶數,那么在之前的標記isPrime的for循環里,也可以跳過偶數,相應的j每次+= 2 * i,因為p(p + 1)必定為偶數。

所以for循環里依次變為i += 2, j += 2 * i, i += 2(上一步為++i, j += i, ++i)。

?

最終版代碼

1 class Solution { 2 public: 3 int countPrimes(int n) { 4 if(n < 3) return 0; 5 bool* isPrime = new bool [n]; 6 for(int i = 3; i < n; ++i) 7 isPrime[i] = true; 8 9 for(int i = 3; i * i <= n; i += 2){ 10 if(!isPrime[i]) continue; 11 for(int j = i * i; j < n; j += 2 * i) 12 isPrime[j] = false; 13 } 14 15 int cnt = 1; 16 cout<<isPrime[9]<<endl; 17 for(int i = 3; i < n; i += 2){ 18 if(isPrime[i]) ++cnt; 19 } 20 return cnt; 21 } 22 };

?

轉載于:https://www.cnblogs.com/co0oder/p/5286781.html

總結

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

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

主站蜘蛛池模板: 国产日韩中文 | 国产情侣激情 | 日韩av免费在线播放 | 精品久久无码中文字幕 | 91色精品| 国产男男gay体育生网站 | 91精品国产自产精品男人的天堂 | 色丁香久久 | 亚洲精品视频在线观看免费视频 | 成人国产在线视频 | 日韩视频一区二区 | 青青久操 | 日本在线观看一区二区三区 | 免费黄色av | 欧美一二在线 | 二区影院 | 黄色av中文字幕 | 性欧美视频 | 亚洲免费视频播放 | 美女被娇喘流出白 | 最新高清无码专区 | 亚洲视频一二三四 | 日本黄色片段 | 未满十八18禁止免费无码网站 | 在线观看免费成人 | 日本www色视频 | 日韩精品一区二区三区免费视频 | 国产伦精品一区二区三区免费视频 | 在线观看的黄网 | 色老大影院| 四虎影视大全 | 久久久久女人精品毛片九一 | 日本一区二区三区视频在线 | 一区二区三区精品视频在线观看 | 日韩一区二区三区不卡 | 麻豆国产精品视频 | 欧美影视一区二区 | 亚洲精品三级 | www.久久爱 | 人成免费| 国产69页| 精品91久久久久久 | 欧美黑人欧美精品刺激 | 果冻传媒18禁免费视频 | 青草一区二区 | 极品销魂美女一区二区三区 | 日本午夜啪啪 | 午夜肉体高潮免费毛片 | va婷婷| 郑艳丽三级 | 国产视频二 | 国产熟女一区二区三区五月婷 | 黑人性视频 | 国产一级黄色大片 | 超碰最新网址 | 美女试爆场恐怖电影在线观看 | 秘密基地免费观看完整版中文 | 中国性xxx | 污视频在线免费观看 | 亚洲男人天堂2019 | 亚洲激情社区 | 调教撅屁股啪调教打臀缝av | 91久久久国产精品 | www色日本| 久久精品丝袜 | 日韩av在线播 | 亚洲精品www久久久久久广东 | 亚洲国产精品毛片 | 亚洲性精品 | 日韩毛片在线视频 | 五月av在线 | 成人激情视频网站 | 成人福利午夜 | 欧美69av| 国产精品第一区 | v天堂在线 | 国产网站在线看 | 国产全是老熟女太爽了 | 成人91网站 | 熟女俱乐部五十路六十路av | 福利社区一区二区 | 亚洲爆乳无码精品aaa片蜜桃 | 久久大伊人| 欧美日韩一区二区在线视频 | 成人av高清在线观看 | 少妇乱淫 | 新91视频在线观看 | 色美av | bl无遮挡高h动漫 | 亚洲永久无码精品 | 在线天堂中文在线资源网 | jlzzjizz在线播放观看 | 国产91对白在线播放 | 国产又黄又爽视频 | 变态 另类 国产 亚洲 | 天天干天天谢 | 男生和女生一起搞鸡 | 欧美日韩在线一区 | 国产卡一卡二卡三无线乱码新区 |