【题解】【AcWing】1646. 谷歌的招聘

188 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1646. 谷歌的招聘

原题传送:AcWing 1646. 谷歌的招聘

2004200477 月,谷歌在硅谷的 101101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。

内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 1010 位素数,这个素数是自然常数 ee 中最早出现的 1010 位连续数字。

能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。

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

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

输入格式

输入在第一行给出 22 个正整数,分别是 LLKK

接下来一行给出一个长度为 LL 的正整数 NN

输出格式

在一行中输出 NN 中最早出现的 KK 位连续数字所组成的素数。

如果这样的素数不存在,则输出 404404

注意,原始数字中的前导零也计算在位数之内。

例如在 200236200236 中找 44 位素数, 00230023 算是解;但第一位 22 不能被当成 00020002 输出,因为在原始数字中不存在这个 22 的前导零。

数据范围

1L10001 \le L \le 1000 , 1K<101 \le K<10

输入样例1:

20 5
23654987725541023819

输出样例1:

49877

输入样例2:

10 3
2468024680

输出样例2:

404

思路:

遍历枚举连续子串,找到第一个质数输出。

题解:

#include<bits/stdc++.h>

using namespace std;

bool prime(int n)
{
	if(n <= 1)
		return false;
	for(int i = 2; i * i <= n; i++)
		if(n % i == 0)
			return false;
	return true;
}

int l, k;
string s;
unordered_map<string, int> mp, st;

int main()
{	
	cin >> l >> k >> s;

	for(int i = 0; i < l - k + 1; i++)
	{
		string str = s.substr(i, k);
		int t = stoi(str);
		if(prime(t))
		{
			cout << str << endl;
			return 0;
		}	
	}	
	
	cout << "404" << endl;
	
	return 0;
}