Project Euler 35 Circular primes


题意: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 <stdio.h>
#include <math.h>
#include <inttypes.h>

#define MAX_N 10000000

int32_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;
}
posted @ 2017-06-25 20:12  ojnQ  阅读(211)  评论(0编辑  收藏  举报