求双向环形素数程序
											.  双向环形素数 一个n位的整数写成环形,如果按顺时针方向,从任意一位开始,读够n位,得到的都是素数;再按逆时针方向,从任意一位开始,读够n位,得到的也都是素数(素数性“立场最坚定”),则称这个数为n位双向环形素数。
如:两位数13组成的13、31都是素数。三位数337,组成的337、373、733也都是素数。所以13、337就分别是二位、三位的双向环形素数。
求六位的双向环形素数。
 程序代码:
程序代码:
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
const int DIGIT = 6;
bool is_annular_prime(int n);
bool is_prime(int n);
int main(void) {
    for (int i = 100000; i < 1000000; ++i) {
        if (is_annular_prime(i)) {
            printf("%d\n", i);
        }
    }
    return 0;
}
bool is_annular_prime(int n) {
    //a 用来存储数字 n 的每一位数
    int a[DIGIT];
    for (int i = DIGIT - 1; i >= 0; --i) {
        a[i] = n % 10;
        n /= 10;
    }
    int tmp1, tmp2, k;
    bool flag = true;
    for (int j = 0; j < DIGIT; ++j) {
        tmp1 = tmp2 = 0;
        for (k = 0; k < DIGIT; ++k) {
            //顺时针判断
            tmp1 = tmp1 * 10 + a[(j + k) % DIGIT];
            //逆时针判断
            tmp2 = tmp2 * 10 + a[(j - k + DIGIT) % DIGIT];
        }
        if (!((tmp1 == tmp2 && is_prime(tmp1))
              || (is_prime(tmp1) && is_prime(tmp2)))) {
            flag = false;
            break;
        }
    }
    return flag;
}
bool is_prime(int n) {
    int max = sqrt(n);
    bool flag = true;
    for (int i = 2; i < max; ++i) {
        if (n % i == 0) {
            flag = false;
            break;
        }
    }
    return flag;
}
										
					
	
 程序代码:
程序代码:
for (int i = DIGIT - 1; i >= 0; --i) {
        a[i] = n % 10;
        n /= 10;
    }
 程序代码:
程序代码:
int i;
for (i = DIGIT - 1; i >= 0; --i) {
        a[i] = n % 10;
        n /= 10;
    }
