2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。

自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921… 其中粗体标出的 10 位数就是答案。

本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。

输入格式:
输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。

输出格式:
在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。

输入样例 1:

20 5
23654987725541023819

输出样例 1:

49877

输入样例 2:

10 3
2468024680

输出样例 2:

404
#include <stdio.h>
int sam(int m){//判断素数 
	int i;
	if(m<2)	return 0;
	for(i=2;i*i<=m;i++){
		if(m%i==0)	return 0;
	}
	return 1;
}
int main(){
	int L,k,i,num;
	char n[1000],arr[10]={0};//字符长度为 L ,K 位连续数字,长度为 L 的正整数 N字符串
	scanf("%d %d %s",&L,&k,n);//L==strlen(n)
	for(i=0;i<=L-k;i++){
		strncpy(arr,n+i,k);//strncpy()函数用于将指定长度的字符串复制到字符数组
		if(sam(atoi(arr))){//atoi()把字符串转换成整型数的一个函数
			printf("%s",arr);
			return 0;
		} 
	}
	printf("404");
	return 0;
}

strncpy()函数

  • char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
  • 格式
char *strncpy(char *dest, const char *src, size_t n)
char *strncpy(存储复制内容的目标数组, 要复制的字符串, 从源中复制的字符数)
  • dest – 指向用于存储复制内容的目标数组。
  • src – 要复制的字符串。
  • n – 要从源中复制的字符数。
  • 该函数返回最终复制的字符串。
  • 案例
#include <stdio.h>
int main(){
   char src[40];
   char dest[12];
  
   memset(dest, '\0', sizeof(dest));
   strcpy(src, "This is codercto.com");
   strncpy(dest, src, 10);

   printf("最终的目标字符串: %s\n", dest);
   
   return(0);
}
  • 编译并运行上面的程序,这将产生以下结果:
最终的目标字符串: This is ru

atoi()函数

  • int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
  • 格式
int atoi(const char *str)
  • str – 要转换为整数的字符串。
  • 该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
  • 案例
#include <stdio.h>
int main(){
   int val;
   char str[20];
   
   strcpy(str, "98993489");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);

   strcpy(str, "runoob.com");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);

   return(0);
}
  • 编译并运行上面的程序,这将产生以下结果:
字符串值 = 98993489, 整型值 = 98993489
字符串值 = runoob.com, 整型值 = 0