int problem35() { int count = 0; for (int i = 0; i < 1000000; ++i) count += isCircularPrime(i); return count; }
size_t euler::problem35() { const auto limit = 1e6_u; std::set< size_t > primes; generate_primes( [ limit, &primes ]( size_t prime ) { if( prime < limit ) primes.insert( prime ); }, limit, { 2, 3 } ); assert( isCircularPrime( 197, primes ) ); assert( boost::size( boost::make_iterator_range( primes.begin(), boost::lower_bound( primes, 1e2_u ) ) | boost::adaptors::filtered( [ &primes ]( size_t prime ) { return isCircularPrime( prime, primes ); } ) ) + 2 == 13 ); return boost::size( primes | boost::adaptors::filtered( [ &primes ]( size_t prime ) { return isCircularPrime( prime, primes ); } ) ) + 2; }
int main(void) { assert(isCircularPrime(197) == true); std::cout << problem35() << std::endl; }