Description
憨憨吃素是憨憨吃透了素数的缩写,某一天他在看到了这样的一张图:
该图向憨憨展示了一个非常酷的“全素日”: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! "); 17 cnt++; 18 }else printf(" NO! "); 19 } 20 //printf("len=%d cnt=%d ",len,cnt); 21 if (cnt==len) printf("All Primes! "); 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 }