[1008]harder_prime

素數定義:一個大於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顛倒以後的數,若是二者相等,那就是迴文數

本站公眾號
   歡迎關注本站公眾號,獲取更多信息