测试了三种优化级别的素数判断方案。
cpp#include <iostream>
#include <algorithm>
#include <cmath>
#include <catch2/catch.hpp>
bool is_prime_0(int n) {
for(int i = 2; i < n; ++i) {
if (n % i == 0)
return false;
}
return true;
}
bool is_prime_1(int n) {
if (n % 2 == 0)
return n == 2;
int sq = floor(sqrt(n));
for (int i = sq | 1; i > 1; i -= 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
bool is_prime_2(int n) {
if (n == 2 || n == 3)
return true;
if (n % 6 != 1 || n % 6 != 5)
return false;
int sq = floor(sqrt(n));
for(int i = 5;i <= sq; i += 6) {
if(n % i == 0 || n % (i+2) == 0)
return false;
}
return true;
}
TEST_CASE("Is Prime") {
int num = 9989899;
BENCHMARK("is_prime_0") {
return is_prime_0(num);
};
BENCHMARK("is_prime_1") {
return is_prime_1(num);
};
BENCHMARK("is_prime_2") {
return is_prime_2(num);
};
}
Benchmark 结果
benchmark name samples iterations estimated mean low mean high mean std dev low std dev high std dev ------------------------------------------------------------------------------- is_prime_0 100 1 3.11125 s 32.4578 ms 31.9605 ms 33.1967 ms 3.04949 ms 2.275 ms 4.22213 ms is_prime_1 100 7 3.374 ms 4.72644 us 4.63879 us 5.03562 us 735.203 ns 234.881 ns 1.64281 us is_prime_2 100 31531 3.1531 ms 1.27671 ns 1.15347 ns 1.70551 ns 1.04434 ns 0.334288 ns 2.36015 ns
本文作者:OhtoAi
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!