原文题目:
读题:
题目很简单,就是求小于n的质数的个数,注意是小于n,不等于n,也就是说n=2的时候,返回0,n=3时才是返回1
一下列出两种方法,一种方法超时,另一种方法逐步优化到46ms
//超时 class Solution { public: int countPrimes(int n) { int count = 0; int i = 0; if (n < 2) { return count; } for(i = 2;i<n;i++) { if(isPrime(i)) { count++; } } return count; } int isPrime(int m) { int i = 0; if(m <2) { return 0; } for(i = 2;i <= m/2;i++) { if(m %i == 0) { return 0; } } return 1; } }; //129ms class Solution { public: int countPrimes(int n) { int count = 0; int i = 0; vector<bool> isprime; for (int i = 0; i < n; i++) isprime.push_back(true); for (int i = 2; i < n; i++) { for (int j = i + i; j < n; j += i) { isprime[j] = false; } } for (int i = 2; i < n; i++) { if (i != 0 && i != 1 && isprime[i]) count++; } return count; } }; //73ms class Solution { public: int countPrimes(int n) { int count = 0; int i = 0; if(n <3) { return 0; } if(n == 3) { return 1; } if(n == 4) { return 2; } vector<bool> isprime; for (int i = 0; i < n; i++) isprime.push_back(true); for (int i = 2; i*i < n; i++) { for (int j = i + i; j < n; j += i) { isprime[j] = false; } } for (int i = 2; i < n; i++) { if (isprime[i]) count++; } return count; } }; //46ms class Solution { public: int countPrimes(int n) { int count = 0; int i = 0; if(n <3) { return 0; } if(n == 3) { return 1; } if(n == 4) { return 2; } vector<bool> isprime; for (int i = 0; i < n; i++) isprime.push_back(true); for (int i = 2; i*i < n; i++) { if(isprime[i]) { for (int j = i + i; j < n; j += i) { isprime[j] = false; } } } for (int i = 2; i < n; i++) { if (isprime[i]) count++; } return count; } };