#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
// This function return vector of primes unsigned integer
vector<unsigned> getPrimes ( unsigned from, unsigned to ) { // both inclusive
vector<unsigned> primes; // declaration of result vector
bool *isprime = new bool[ to+1 ]; // creating sieve of Eratosthenes
memset ( isprime, 0xFF, to ); // setting all marks as true so every number now is prime
unsigned n = 2; // start from 2 becouse 1 obviously prime (or not prime - it's not a actual question here)
for ( ; n*n <= to; n++ ) { // cycle throught all integers (lesser or equal than 'to')
if ( isprime[ n ] ) { // if 'n' actualy is prime
for ( unsigned i = n*n; i <= to; i += n ) { // than cycle throght all divisible by 'n' greater than square of 'n'
isprime[ i ] = false; // and mark them as non-prime
}
if ( n > from ) { // also, if one included by range
primes.push_back ( n ); // push it back into vector
}
}
} // end of sieve
n = std::max ( n, from ); // and, after sieve
for ( ; n <= to; n++ ) { // we go to the end of our range
if ( isprime[ n ] ) { // in order to catch all remaining primes
primes.push_back ( n ); // and push it back into vector
}
}
return primes; // as final - return vector of primes
}
int main () {
int line = 0; // just set it to -1 if you want to miss print line-breaker
// cycle below just prints primes
for ( auto prime: getPrimes ( 100, 500 ) ) {
cout << prime << " ";
if ( line != -1 ) {
line++;
if ( !(line%5) ) cout << endl; // end line-breaker, if line != -1
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIFRoaXMgZnVuY3Rpb24gcmV0dXJuIHZlY3RvciBvZiBwcmltZXMgdW5zaWduZWQgaW50ZWdlcgp2ZWN0b3I8dW5zaWduZWQ+IGdldFByaW1lcyAoIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvICkgeyAvLyBib3RoIGluY2x1c2l2ZQogICAgdmVjdG9yPHVuc2lnbmVkPiBwcmltZXM7IC8vIGRlY2xhcmF0aW9uIG9mIHJlc3VsdCB2ZWN0b3IKICAgIGJvb2wgKmlzcHJpbWUgPSBuZXcgYm9vbFsgdG8rMSBdOyAvLyBjcmVhdGluZyBzaWV2ZSBvZiBFcmF0b3N0aGVuZXMKICAgIG1lbXNldCAoIGlzcHJpbWUsIDB4RkYsIHRvICk7IC8vIHNldHRpbmcgYWxsIG1hcmtzIGFzIHRydWUgc28gZXZlcnkgbnVtYmVyIG5vdyBpcyBwcmltZQogICAgdW5zaWduZWQgbiA9IDI7IC8vIHN0YXJ0IGZyb20gMiBiZWNvdXNlIDEgb2J2aW91c2x5IHByaW1lIChvciBub3QgcHJpbWUgLSBpdCdzIG5vdCBhIGFjdHVhbCBxdWVzdGlvbiBoZXJlKQogICAgZm9yICggOyBuKm4gPD0gdG87IG4rKyApIHsgLy8gY3ljbGUgdGhyb3VnaHQgYWxsIGludGVnZXJzIChsZXNzZXIgb3IgZXF1YWwgdGhhbiAndG8nKQogICAgICAgIGlmICggaXNwcmltZVsgbiBdICkgeyAvLyBpZiAnbicgYWN0dWFseSBpcyBwcmltZQogICAgICAgICAgICBmb3IgKCB1bnNpZ25lZCBpID0gbipuOyBpIDw9IHRvOyBpICs9IG4gKSB7IC8vIHRoYW4gY3ljbGUgdGhyb2dodCBhbGwgZGl2aXNpYmxlIGJ5ICduJyBncmVhdGVyIHRoYW4gc3F1YXJlIG9mICduJwogICAgICAgICAgICAgICAgaXNwcmltZVsgaSBdID0gZmFsc2U7IC8vIGFuZCBtYXJrIHRoZW0gYXMgbm9uLXByaW1lCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggbiA+IGZyb20gKSB7IC8vIGFsc28sIGlmIG9uZSBpbmNsdWRlZCBieSByYW5nZQogICAgICAgICAgICAgICAgcHJpbWVzLnB1c2hfYmFjayAoIG4gKTsgLy8gcHVzaCBpdCBiYWNrIGludG8gdmVjdG9yCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IC8vIGVuZCBvZiBzaWV2ZQoKICAgIG4gPSBzdGQ6Om1heCAoIG4sIGZyb20gKTsgLy8gYW5kLCBhZnRlciBzaWV2ZQogICAgZm9yICggOyBuIDw9IHRvOyBuKysgKSB7ICAvLyB3ZSBnbyB0byB0aGUgZW5kIG9mIG91ciByYW5nZQogICAgICAgIGlmICggaXNwcmltZVsgbiBdICkgeyAvLyBpbiBvcmRlciB0byBjYXRjaCBhbGwgcmVtYWluaW5nIHByaW1lcwogICAgICAgICAgICBwcmltZXMucHVzaF9iYWNrICggbiApOyAvLyBhbmQgcHVzaCBpdCBiYWNrIGludG8gdmVjdG9yCiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcmltZXM7IC8vIGFzIGZpbmFsIC0gcmV0dXJuIHZlY3RvciBvZiBwcmltZXMKfQoKaW50IG1haW4gKCkgewogICAgaW50IGxpbmUgPSAwOyAvLyBqdXN0IHNldCBpdCB0byAtMSBpZiB5b3Ugd2FudCB0byBtaXNzIHByaW50IGxpbmUtYnJlYWtlcgogICAgLy8gY3ljbGUgYmVsb3cganVzdCBwcmludHMgcHJpbWVzCiAgICBmb3IgKCBhdXRvIHByaW1lOiBnZXRQcmltZXMgKCAxMDAsIDUwMCApICkgewogICAgICAgIGNvdXQgPDwgcHJpbWUgPDwgIiAiOwogICAgICAgIGlmICggbGluZSAhPSAtMSApIHsKICAgICAgICAgICAgbGluZSsrOwogICAgICAgICAgICBpZiAoICEobGluZSU1KSApIGNvdXQgPDwgZW5kbDsgLy8gZW5kIGxpbmUtYnJlYWtlciwgaWYgbGluZSAhPSAtMQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQo=