Add files via upload
parent
af47764be0
commit
6c25653f10
|
@ -0,0 +1,34 @@
|
||||||
|
//Linear Sieve
|
||||||
|
//Finding primes in linear time
|
||||||
|
|
||||||
|
//Every composite q must have atleast 1 prime factor
|
||||||
|
//Let the smallest prime factor be p
|
||||||
|
//We can say q = p*(i)
|
||||||
|
|
||||||
|
//When we loop for every i, all primes not exceeding i is already stored in primes
|
||||||
|
//We can pick out each composite exactly once by looping and breaking out when the element divides i
|
||||||
|
|
||||||
|
#include<bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
vector<int> primes;
|
||||||
|
bool check[INT_MAX];
|
||||||
|
|
||||||
|
|
||||||
|
void LinearSieve(int n) {
|
||||||
|
fill(check, check+n, false);
|
||||||
|
for(int i=2;i<n;i++){
|
||||||
|
if(!check[i]) primes.push_back(i);
|
||||||
|
for(int j=0;j<primes.size() && i*primes[j] < n;j++){ //Executed only once for each composite
|
||||||
|
check[i*primes[j]] = true;
|
||||||
|
if(i%primes[j]==0) break; //Breaks when p divides i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
int n;
|
||||||
|
cin >> n;
|
||||||
|
LinearSieve(n); //Call the function
|
||||||
|
return 0; //Time complexity : O(n*log(log(n))), Auxiliary Space: O(1)
|
||||||
|
//Example : n=10 , Output: 2 3 5 7
|
||||||
|
}
|
Loading…
Reference in New Issue