码迷,mamicode.com
首页 > 其他好文 > 详细

[1008]harder_prime

时间:2016-01-18 00:24:15      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

素数定义:一个大于1的整数,如果它的约数如果只有1和它本身,那么它就是一个素数。

回文数定义:一个整数把它的各位数字倒过来还是它本身,那么它就是回文数,比如说2,99,393。

回文素数定义:一个数如果既是素数,也是回文数,那么我们就称它为回文数,比如说:7,11,131。

现在我们有n个数,需要你判断它们是不是回文素数。

 

【输入格式】

 

第一行仅一个数n(n<100),为要判断的数的个数。

接下来n行,每行有一个数x(x<1,000,000,000),即为要你判断的数。

 

【输出格式】

 

共有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颠倒之后的数,如果两者相等,那就是回文数

[1008]harder_prime

标签:

原文地址:http://www.cnblogs.com/-lyric/p/5138027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!