题目:判断一个数和翻转是不是素数。
分析:简单题、数论。首先打表计算1000000内的素有素数,然后判断即可。
注意:翻转后的数字如果是原来的数字就不算emirp。
#include <iostream>
#include <cstdlib>
using namespace std;
int prime[1000000];
long rev( long dat )
{
long now = 0;
while ( dat ) {
now *= 10;
now += dat%10;
dat /= 10;
}
return now;
}
int main()
{
//打表计算素数
for ( long i = 0 ; i < 1000000 ; ++ i )
prime[i] = 1;
for ( long i = 2 ; i < 1000000 ; ++ i )
if ( prime[i] )
for ( long j = 2*i ; j < 1000000 ; j += i )
prime[j] = 0;
long n;
while ( cin >> n ) {
cout << n;
if ( !prime[n] )
cout << " is not prime.\n";
else if ( n != rev(n) && prime[rev(n)] )
cout << " is emirp.\n";
else cout << " is prime.\n";
}
return 0;
}