不小于N的素数个数
使用eratosthenes algorithm算法。
算法思想:从2~n遍历,过滤到素数的倍数,没有被过滤的就是素数。
//eratosthenes algorithm
int countPrimes(int n) {
//使用0和1两种状态就OK
vector<int> vn(n,1);
int count=0;
for(int i=2;i<n;i++){ //2是过滤种子
if(vn[i]==1){ //遍历到达了i但是i没有被过滤,说明i时素数
//filter by i
for(int j=2;j*i<n;j++){
vn[j*i]=0;
}
}
}
for(int i=2;i<n;i++){
if(vn[i]==1){
count++;
}
}
return count;
}
找出n的所有素因子
vector<int> findAllPrime(int n)
{
vector<int> primes;
for(int i=2;i<n;i++){
while (n%i==0){
n = n/i;
primes.push_back(i);
}
}
if(n!=1)
primes.push_back(n);
return primes;
}