#include <iostream>
#include <vector>
using namespace std;
vector<int> gen_primes_sieve(int max)
{
// uzywam vector<char> zamiast vector<bool> bo vector<bool> ma jakies glupie
// optymalizacje pojemnosci przez co dziala wolniej,
// mozesz zmienic jesli chcesz
vector<char> is_not_prime(max + 1, false);
vector<int> ret;
// po kolei sprawdzamy kazda liczbe (0 i 1 nie sa pierwsze z zalozenia)
for (int i = 2; i <= max; i++)
{
if (!is_not_prime[i])
{
ret.push_back(i);
// jesli i jest liczba pierwsza to:
// i * 2, i * 3, i * 4, ...
// juz nie sa
for (int j = i * 2; j <= max; j += i)
{
is_not_prime[j] = true;
}
}
}
return ret;
}
int main()
{
vector<int> primes = gen_primes_sieve(100);
for (auto prime : primes)
{
cout << prime << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+IGdlbl9wcmltZXNfc2lldmUoaW50IG1heCkKewogIC8vIHV6eXdhbSB2ZWN0b3I8Y2hhcj4gemFtaWFzdCB2ZWN0b3I8Ym9vbD4gYm8gdmVjdG9yPGJvb2w+IG1hIGpha2llcyBnbHVwaWUKICAvLyBvcHR5bWFsaXphY2plIHBvamVtbm9zY2kgcHJ6ZXogY28gZHppYWxhIHdvbG5pZWosCiAgLy8gbW96ZXN6IHptaWVuaWMgamVzbGkgY2hjZXN6CiAgdmVjdG9yPGNoYXI+IGlzX25vdF9wcmltZShtYXggKyAxLCBmYWxzZSk7CiAgdmVjdG9yPGludD4gcmV0OwogIAogIC8vIHBvIGtvbGVpIHNwcmF3ZHphbXkga2F6ZGEgbGljemJlICgwIGkgMSBuaWUgc2EgcGllcndzemUgeiB6YWxvemVuaWEpCiAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbWF4OyBpKyspCiAgewogIAlpZiAoIWlzX25vdF9wcmltZVtpXSkKICAJewogIAkgIHJldC5wdXNoX2JhY2soaSk7CiAgCSAgLy8gamVzbGkgaSBqZXN0IGxpY3piYSBwaWVyd3N6YSB0bzoKICAJICAvLyBpICogMiwgaSAqIDMsIGkgKiA0LCAuLi4KICAJICAvLyBqdXogbmllIHNhCgkgIGZvciAoaW50IGogPSBpICogMjsgaiA8PSBtYXg7IGogKz0gaSkKCSAgewoJICAJaXNfbm90X3ByaW1lW2pdID0gdHJ1ZTsKCSAgfQogIAl9CiAgfQogIAogIHJldHVybiByZXQ7Cn0KCmludCBtYWluKCkKewogIHZlY3RvcjxpbnQ+IHByaW1lcyA9IGdlbl9wcmltZXNfc2lldmUoMTAwKTsKICBmb3IgKGF1dG8gcHJpbWUgOiBwcmltZXMpCiAgewogICAgY291dCA8PCBwcmltZSA8PCBlbmRsOwogIH0KICByZXR1cm4gMDsKfQ==