#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
const size_t N = 1000000;
const size_t root = 1000;
vector<int> isprime(N);
fill( isprime.begin(), isprime.end(), 1 );
isprime[0] = 0;
isprime[1] = 0;
for ( size_t i = 2; i < root; ++i )
{
if ( isprime[i] != 0 )
{
for ( int j = i + i; j < N; j += i )
{
isprime[j] = 0;
}
}
}
int count = 0;
for ( size_t n = 2; n < N; ++n )
{
if ( isprime[n] != 0 )
{
size_t tmp = n / 10;
size_t highest_weight = 1;
while ( tmp != 0 )
{
tmp /= 10;
highest_weight *= 10;
}
tmp = n / 10;
size_t m = n;
while ( tmp != 0 )
{
m = m % 10 * highest_weight + m / 10;
if ( isprime[m] == 0 )
{
break;
}
tmp /= 10;
}
if ( tmp == 0 )
{
++count;
}
}
}
cout << count << endl;
return 0;
}
http://projecteuler.net/problem=35 [Answer:55]
最新推荐文章于 2020-11-20 18:49:36 发布