素数定义:一个大于1的整数,若是它的约数若是只有1和它自己,那么它就是一个素数。算法
回文数定义:一个整数把它的各位数字倒过来仍是它自己,那么它就是回文数,好比说2,99,393。优化
回文素数定义:一个数若是既是素数,也是回文数,那么咱们就称它为回文数,好比说:7,11,131。spa
如今咱们有n个数,须要你判断它们是否是回文素数。code
【输入格式】blog
第一行仅一个数n(n<100),为要判断的数的个数。get
接下来n行,每行有一个数x(x<1,000,000,000),即为要你判断的数。io
【输出格式】class
共有n行,每行有一个单词,对于每一个x,若是x是回文素数,则输出“Yes”,不然输出“No”(不包括引号,注意大小写)。循环
【输入样例】数据
3
7
12
121
【输出样例】
Yes
No
No
【数据范围】
40%的数据:n<=10,x<1,000
70%的数据:n<=50,x<100,000
100%的数据:n<100,x<1,000,000,000
Hint
回文数的判断,质数的判断。
优化质数判断的算法。
个人
1 #include<stdio.h> 2 #include<math.h>//sqrt()须要用到这个头文件,莫忘!!! 3 int main() { 4 long long n, sum = 0, x, i;//long long的最大值:9223372036854775807 5 int flag = 0, yu;//longlong的最小值:-9223372036854775808 6 scanf("%lld", &n);//注意为%lld,常常忘记 7 while (n--) { 8 scanf("%lld", &x); 9 long long zhong = sqrt(x);//原本想用x/2的,结果会超时,故用最正确的算法 10 for (i = 2; i <= zhong; i++) { 11 if (x % i == 0) { 12 flag = 1; 13 break; 14 } 15 } 16 for (i = x; i != 0; i /= 10) {//将数字颠倒过来的办法 17 yu = i % 10; 18 sum = sum * 10 + yu; 19 } 20 if (sum != x) 21 flag = 1; 22 if (flag == 0) 23 printf("Yes\n"); 24 else 25 printf("No\n"); 26 flag = 0; 27 sum = 0; 28 } 29 return 0; 30 }
求解回文数的算法:
一个整数把它的各位数字倒过来仍是它自己,因此主要是将数字倒过来
好比你输入的数是12321:
循环开始前:m=12321,sum=0;
第1次循环结束:m=1232,sum=1;
第2次循环结束:m=123,sum = 12;
第3次循环结束:m=12,sum=123;
第4次循环结束:m=1,sum=1232;
第5次循环结束:m=0,sum=12321。
输入的是几位数就循环几回。
判断的思路就是,经过循环依次把m的个位,十位,百位...上的数取出来,与sum*10相加。这样获得的数sum就是m颠倒以后的数,若是二者相等,那就是回文数。