本文主要是介绍百炼3247 回文素数(递归),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。输入位数n,其中1<=n<=9。输出第一行输出满足条件的素数个数。
第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。样例输入
1
样例输出
4
2 3 5 7
#include<string.h>
#include<stdio.h>
#include<math.h>int n;
int flag = 0;
int cnt = 0;
int number = 0;
int temp[10];
int result[10000];void isPrime(int a)
{if (a==1||a==0){flag = 1;}for (int i = 2; i <= (int)sqrt(a); i++){if (a%i == 0){flag = 1;break;}}if (flag == 0){result[number++] = a;}flag = 0;}void generate(int k)
{if (k == n){int a = 0;for (int i = 0; i < n; i++){a = a * 10;a = a + temp[i];}isPrime(a);return;}if ((k < n / 2) || (n % 2 != 0 && k < n / 2 + 1)){for (int j = 0; j < 10; j++){if (k == 0 && (j == 0 || j == 2 || j == 4 || j == 6 || j == 8)&&n>1){continue;}temp[k] = j;generate(k + 1);}}else{temp[k] = temp[n - k - 1];generate(k + 1);}}int main()
{scanf("%d", &n);generate(0);printf("%d\n", number);for (int i = 0; i < number; i++){printf("%d ", result[i]);}return 0;
}
这篇关于百炼3247 回文素数(递归)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!