자료구조/BitMask
에라토스테네스의 체(비트마스크)
gokimkh
2022. 4. 7. 19:15
#include <bits/stdc++.h>
#define l long long
#define INF 2e9
#define p pair<int,int>
#define vc vector<unsigned char>
#define F first
#define S second
using namespace std;
//unsigned char는 1바이트로 총 8비트의 공간이 있다.
bool isPrime(int k,vc &arr){
return arr[k >> 3] & (1 << (k & 7));
}
void Set(int k,vc &arr){
arr[k >> 3] &= ~(1 << (k & 7));
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int n,a,ans = 0;
cin >> n;
vc arr((1000+7) / 8 +1,255);
Set(1,arr);
for(int i=2;i*i<=1000;i++){
if(isPrime(i,arr)){
for(int j=i*i;j<=1000;j+=i)
Set(j,arr);
}
}
for(int i=0;i<n;i++){
cin >> a;
if(isPrime(a,arr)) cout << a << " ";
}
}