ソースコード
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <sstream>
#include <cmath>
#include <set>
#include <iomanip>
#include <deque>
#include <stdio.h>
#include <random>
using namespace std;
#define REP(i,n) for(int (i)=0;(i)<(int)(n);(i)++)
#define RREP(i,n) for(int (i)=(int)(n)-1;i>=0;i--)
#define REMOVE(Itr,n) (Itr).erase(remove((Itr).begin(),(Itr).end(),n),(Itr).end())
typedef long long ll;
struct PrimeNumbers {
vector<bool> sieve;
vector<long long> prime;
PrimeNumbers (int n) : sieve(n+1,true) {
sieve[0] = sieve[1] = false;
for (long long i = 2; i < sieve.size(); i++) {
if (sieve[i]) {
prime.push_back(i);
for (long long j = i * i; j < sieve.size(); j += i) {
sieve[j] = false;
}
}
}
}
bool isPrime(long long n) {
return sieve[n];
}
int size(void) {
return (int) prime.size();
}
long long operator [] (int n) {
return prime[n];
}
};
int main() {
ll N; cin >> N;
PrimeNumbers p(N);
REP(i,p.size()) {
cout << p[i] << (i < p.size() - 1 ? " " : "\n");
}
return 0;
}