Python 刷題日記:LeetCode 204: Count Primes
原題:
Description:
Count the number of prime numbers less than a non-negative number, n.
解題思路:
常規解法:
因為要求解小於n的素數個數,首先要解決如何判斷一個素數。那麼就是對於一個數x,只需對[2,]的數進行整除,若能整除則不是素數,不能整除則為素數。然後判斷小於n的各個數是否為素數,這樣做法的複雜度顯然為O(n^2),在LeetCode中肯定TLE。
def countPrimes(n):
import math
count=0
def judge_prime (w):
sqrt_w=int(math.sqrt(w))
for i in xrange(2,sqrt_w+1):
if x%i==0:
return 0
return 1
for x in xrange(2,n):
count=count+judge_prime(x)
return count
沒辦法了我就去Google了一下,於是知道了厄拉多塞篩法:
西元前250年,希臘數學家厄拉多塞(Eeatosthese)想到了一個非常美妙的質數篩法,減少了逐一檢查每個數的的步驟,可以比較簡單的從一大堆數字之中,篩選出質數來,這方法被稱作厄拉多塞篩法(Sieve of Eeatosthese)
。具體操作:先將 2~n 的各個數放入表中,然後在2的上面畫一個圓圈,然後劃去2的其他倍數;第一個既未畫圈又沒有被劃去的數是3,將它畫圈,再劃去3的其他倍數;現在既未畫圈又沒有被劃去的第一個數 是5,將它畫圈,並劃去5的其他倍數……依次類推,一直到所有小於或等於 n 的各數都畫了圈或劃去為止。這時,表中畫了圈的以及未劃去的那些數正好就是小於 n 的素數。
其實,當你要畫圈的素數的平方大於 n 時,那麼後面沒有劃去的數都是素數,就不用繼續判了。如下圖:
python改進版:
從上面的厄拉多塞篩法可以看出,我們只需遍歷[2,],因為超過部分如果不是素數,則作為因子在前面的數已經被刪除了。同時這裡利用了python裡list的特性[::i]取i的倍數。
def countPrimes(self, n):
if n < 3:
return 0
primes = [True] * n
primes[0] = primes[1] = False
for i in range(2, int(n ** 0.5) + 1):
if primes[i]:
primes[i * i: n: i] = [False] * len(primes[i * i: n: i])
return sum(primes)
相關推薦
Python 刷題日記:LeetCode 204: Count Primes
原題: Description: Count the number of prime numbers less than a non-negative number, n. 解題思路: 常規解法: 因為要求解小於n的素數個數,首先要解決如何判斷
Python 刷題日記:LeetCode 5&9&516- Longest Palindromic Substring 題集合
原題:LeetCode 5 Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You may assume that
python刷題日記:劍指offer-調整陣列順序使奇數位於偶數前面
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 解題思路 傳統方法應該是給兩個一前一後指標,遇到前偶數與後奇數時,就交換。然而我發現一個更簡便的方法,就是給兩個列表,奇偶分開放,最後
【本人禿頂程式設計師】刷題啦:LeetCode演算法題-Valid Anagram
←←←←←←←←←←←← 我都禿頂了,還不點關注! 今天介紹的是LeetCode演算法題中Easy級別的題。給定兩個字串s和t,寫一個函式來確定t是否是s的anagram。例如: 輸入:s =“anagram”,t =“nagaram” 輸出:true 輸入:s =“rat”,t
[leetcode] 204. Count Primes @ python
原題 https://leetcode.com/problems/count-primes/ Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Ou
刷題筆記:leetcode第5題:Longest Palindromic Substring
記錄一下~~ 作者刷leetcode刷到吐血,第五題感覺沒有太好的官方解決方法,我是這麼做的 問題: 思路:由於字串可能很大,消耗計算量的做法肯定是不能用的,最後只遍歷一次,找出所有迴文 1、遍歷每個字元 2、每次得到字元後,再迴圈
[leetcode-204-Count Primes]
class i++ color code tor div 開始 ima log Description:Count the number of prime numbers less than a non-negative number, n. 思路: 參考http://ww
leetcode 204. Count Primes
img ++ color 所有 ret count eof src rime 題目描述 註意:1既不是素數也不是合數 可以通過標記的方法找到所有非素數。 class Solution { public: int countPrimes(int n) {
leetcode-204-Count Primes
() tps data- top weight 般的 dsm get lin Count Primes Description: Count the number of
[LeetCode] 204. Count Primes 計數質數
inf function wikipedia rip end cto ins java 自然 Description: Count the number of prime numbers less than a non-negative number, n click
[LeetCode] 204. Count Primes
NPU style 應該 pre class i++ less esc int 204. Count Primes Count the number of prime numbers less than a non-nega
[leetcode]204.Count Primes
mes solution The 數組 count prime otp num xpl 題目 Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 O
leetcode:(204) Count Primes(java)
package LeetCode_HashTable; /** * 題目: * Count the number of prime numbers less than a non-negative number, n. * Example: * Inp
#Leetcode# 204. Count Primes
n) code ret tps target rim HERE n-n ++ https://leetcode.com/problems/count-primes/ Count the number of prime numbers less than a non-ne
LeetCode 204.Count Primes (計數質數)
題目描述: 統計所有小於非負整數 n 的質數的數量。 示例: 輸入: 10 輸出: 4 解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。 AC C++ Solution: 解題思路:首先排除2之外的所有偶數,2預設
LeetCode - 204 Count Primes & 611 - Valid Triangle Number
LeetCode - 204 Count Primes & 611 - Valid Triangle Number LeetCode - 204 Count Primes LeetCode - 611 - Valid Triangle Number
LeetCode: 204. Count Primes判斷是否為素數的高效方法
連結: https://leetcode.com/problems/count-primes/#/description Description: Count the number of prime
LeetCode 204. Count Primes(C++版)
Description: Count the number of prime numbers less than a non-negative number, n. 思路分析: 方法一:我們知道大於2的偶數肯定不是素數。所以遍歷小於n的奇數,判斷是否為素數,是,cou
【LeetCode & 劍指offer刷題】特殊數題3:204 Count Primes
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 204. Count Primes Count the number of prime numbers less than a non-negative numbe
Leetcode做題日記:32. 最長有效括號 (PYTHON)
給定一個只包含 ‘(’ 和 ‘)’ 的字串,找出最長的包含有效括號的子串的長度。 示例 1: 輸入: “(()” 輸出: 2 解釋: 最長有效括號子串為 “()” 示例 2: 輸入: “)()())” 輸出: 4 解釋: 最長有效括號子串為 “()()” 沒看清題目就寫,以為是求輸入