Brilliant numbers: Difference between revisions

Content added Content deleted
(Added C++ solution)
m (C++ - simplified code)
Line 34: Line 34:
<lang cpp>#include <algorithm>
<lang cpp>#include <algorithm>
#include <chrono>
#include <chrono>
#include <cmath>
#include <iomanip>
#include <iomanip>
#include <iostream>
#include <iostream>
Line 85: Line 84:
const auto& primes = primes_by_digits[p / 2];
const auto& primes = primes_by_digits[p / 2];
size_t position = count + 1;
size_t position = count + 1;
uint64_t sqrt = static_cast<uint64_t>(std::ceil(std::sqrt(power)));
uint64_t min_product = 0;
uint64_t min_product = 0;
for (auto i = primes.begin(); i != primes.end(); ++i) {
for (auto i = primes.begin(); i != primes.end(); ++i) {
Line 96: Line 94:
min_product = product;
min_product = product;
position += std::distance(i, j);
position += std::distance(i, j);
if (p1 >= p2)
break;
}
}
if (p1 >= sqrt)
break;
}
}
std::cout << "First brilliant number >= 10^" << p << " is "
std::cout << "First brilliant number >= 10^" << p << " is "
Line 144: Line 142:
First brilliant number >= 10^15 is 1,000,000,000,000,003 at position 2,601,913,448,897
First brilliant number >= 10^15 is 1,000,000,000,000,003 at position 2,601,913,448,897


Elapsed time: 0.160985 seconds
Elapsed time: 0.167788 seconds
</pre>
</pre>