线性时间复杂度求素数
思路:
求给定范围1-20000内所有素数,从2开始,假定所以数均为素数,设置为true。
由于任何数的倍数一定不是素数,故将其所有倍数全部设置为false。
最终数组中剩余为true的数即为所求范围内全部素数。
#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
#define MAX_SIZE 20000
void getPrimeNumber(vector<bool>& numbers, vector<int>& prime)
{
for (int i = 2; i <= MAX_SIZE; i++)
{
if (numbers[i] == true)
{
prime.push_back(i);
}
for (int j = i; j <= MAX_SIZE; j += i)
numbers[j] = false;
}
}
int main()
{
vector<bool> numbers(MAX_SIZE+1, true);
vector<int> primes{};
getPrimeNumber(numbers, primes);
int count = 0;
for (auto item : primes)
{
cout <<left<<setw(8)<< item;
count++;
if (count == 10)
{
cout << endl;
count = 0;
}
}
}