应该说这是比较高效的解题方法了吧。
素数个数计数:
class Solution { public: int countPrimes(int n) { bool* a = new bool[n]; for(int i=2; i*i<n; i++) { if(!a[i]) { for(int j=i; i*j<n; j++) { a[i*j] = true; } } } int c=0; for(int i=2; i<n; i++) { if(a[i] == false) ++c; } return c; } };
素数的判断:
bool primenum(int m) { int t=sqrt(m); for(int i=2;i<=t;i++) { if(m%i==0) return false; } return true; }
素数的判断可以对照下面一个程序:
int IsPrime(int N) { int i, j; if (N == 2) //按照国内标准,认为2是最小的素数 return true; else if (N < 2 || N % 2 ==0) //小于2或者大于2的偶数 不是素数 return false; else //大于2的奇数 { j = (int)sqrt(N + 1); //个人认为,此处的+1毫无用处,姑且这么写吧 for (i = 3; i <= j; i = i + 2) if (N % i == 0) return false; } return true; }
时间: 2024-10-25 17:15:49