1. 程式人生 > >204. Count Primes(python+cpp)

204. Count Primes(python+cpp)

題目:

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

Input: 10 
Output: 4 
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.

解釋: 還是用動態規劃的方式做,比寫函式開根號的節省時間。 python程式碼:

from math import sqrt
class Solution(object):
    def countPrimes(self, n):
        """
        :type n: int
        :rtype: int
        """
if n<=2: return 0 isPrime=[True]*n isPrime[0]=isPrime[1]=False # 在選擇除數時候的一個小技巧.大於一半的數是不可能做除數的.可以節省時間 for i in xrange(2,int(n**0.5)+1): if isPrime[i]==True: ''' j=i*i while j<n: isPrime[j]=False j+=i '''
isPrime[i * i: n: i] = [False] * len(isPrime[i * i: n: i]) # 非常簡潔的語句 return sum(isPrime)

c++程式碼:

#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
    int countPrimes(int n) {
        vector<bool> isPrime
(n,true); isPrime[0]=false; isPrime[1]=false; for (int i=2;i<int(sqrt(n))+1;i++) { if(isPrime[i]) { int j=i*i; while (j<n) { isPrime[j]=false; j+=i; } } } return count(isPrime.begin(),isPrime.end(),true); } };

總結: 也是再做的時候才發現j需要遍歷到i**2+1就好了,這樣寫,時間變了原來的1/3,震驚。 python可以直接sum()一個bool陣列來求陣列中的True的個數,用python的切片實現賦值簡直震驚,注意陣列初始化為True。 注意題目是less than n,所以陣列元素初始化為n