题意:197被称为圆周素数,因为将它逐位旋转所得到的数:197/971和719都是素数。小于100的圆周素数有十三个:2、3、5、7、11、13、17、31、37、71、73、79和97。小于一百万的圆周素数有多少个?
/************************************************************************* > File Name: euler035.c > Author: WArobot > Blog: http://www.cnblogs.com/WArobot/ > Created Time: 2017年06月25日 星期日 18时56分56秒 ************************************************************************/#include#include #include #define MAX_N 10000000int32_t prime[MAX_N] = {0};void init_prime(){ for(int i = 2 ; i * i < MAX_N ; i++) { if( prime[i] == 0 ) { for(int j = 2 * i ; j < MAX_N ; j += i) prime[j] = 1; } }}bool IsCircularNumber(int32_t x){ if (prime[x] != 0) return false; int32_t t = x , d , h; d = (int32_t)floor(log10(x) + 1); h = (int32_t)pow(10 , d - 1); for(int32_t i = 0 ; i < d - 1 ; i++) { t = (t / h) + (t % h) * 10; if (prime[t] != 0) return false; } return true;}int32_t main() { init_prime(); int32_t cnt = 0; for(int32_t i = 2 ; i * 10 <= MAX_N ; i++) { if( IsCircularNumber(i) ) cnt++; } printf("%d\n",cnt); return 0;}