Skip to content

Instantly share code, notes, and snippets.

@johzzy
Created October 21, 2019 06:44
Show Gist options
  • Save johzzy/d4c01fea46a272e3b1ed1013ff055ada to your computer and use it in GitHub Desktop.
Save johzzy/d4c01fea46a272e3b1ed1013ff055ada to your computer and use it in GitHub Desktop.
c++
struct generator {
using array = std::vector<int>;
static array gen(int num) {
array primes{2};
array visited(num, 0);
for (int i=3; i<num; i+=2) {
if (visited[i] == 0 && i % primes.back() != 0) {
primes.push_back(i);
for (int n=i; n<num; n+=i) {
visited[n] = 1;
}
}
}
return primes;
}
static void show(int num) {
auto a = std::chrono::steady_clock::now();
auto primes = gen(num);
auto b = std::chrono::steady_clock::now();
auto delta = std::chrono::duration_cast<std::chrono::microseconds>(b-a);
printf("%d, %zu, %lld us, (last 10): ", num, primes.size(), delta.count());
for (auto i = primes.rbegin(); i != primes.rbegin() + 10 && i != primes.rend(); ++i) {
printf("%d ", *i);
}
puts("\n");
}
};
int main() {
puts("\n");
generator::show(40);
generator::show(400);
generator::show(4000);
generator::show(40000);
generator::show(400000);
generator::show(4000000);
generator::show(40000000);
generator::show(400000000);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment