应该说这是比较高效的解题方法了吧。
素数个数计数:
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;
}原文:http://yuzwei.blog.51cto.com/10126623/1655957