一道小题

 

 

Description

憨憨吃素是憨憨吃透了素数的缩写,某一天他在看到了这样的一张图:

img

该图向憨憨展示了一个非常酷的“全素日”:20192019年55月2323日。即不仅2019052320190523本身是个素数,它的任何以末尾数字33结尾的子串都是素数。这是憨憨吃素后迎接的第一个挑战,请问给你一个给定日期,问是否是“全素日”。

 

Input

输入按照年月日的格式给出一个日期。题目保证日期在0001年1月1日到9999年12月31日之间。

 

Output

从原始日期开始,按照子串长度递减的顺序,每行首先输出一个子串和一个空格,然后输出 YES,如果该子串对应的数字是一个素数,否则输出 NO。如果这个日期是一个全素日,则在最后一行输出 All Primes!。

 

Sample Input 1 

20190523

Sample Output 1

20190523 YES
0190523 YES
190523 YES
90523 YES
0523 YES
523 YES
23 YES
3 YES
All Primes!

Sample Input 2 

20201121

Sample Output 2

20201121 NO
0201121 YES
201121 YES
01121 NO
1121 NO
121 NO
21 NO
1 NO

 

 

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 
 5 int DJ(char* p,int n);
 6 int su(int tmp);
 7 int main()
 8 {
 9     char a[20];
10     gets(a);
11     int len=strlen(a);
12     int n,m,cnt=0;
13     for(n=0;n < len;n ++){
14         m = DJ(a,n);
15         if(su(m)){
16             printf("   YES!\n");
17             cnt++;
18         }else printf("   NO!\n");
19     }
20     //printf("len=%d cnt=%d\n",len,cnt);
21     if (cnt==len) printf("All Primes!\n");
22     return 0;
23 }
24 int DJ(char* p,int n){
25     int i,tmp=0;
26     for(i=n;i<strlen(p);i++){
27         tmp = 10*tmp + p[i]-'0';//将字符数组一节一节转为整数返回来判断素 
28         printf("%c",p[i]);
29     }
30 
31     return tmp;
32 }
33 int su(int tmp){
34     if (tmp==1||tmp==0) return 0;
35     for(int i=2;i <= sqrt(tmp);i ++){
36         if(tmp%i==0){
37             return 1;
38         }
39     }
40     return 0;
41 }

 

posted @ 2020-12-02 23:31  泥烟  阅读(95)  评论(0编辑  收藏  举报