1152 Google Recruitment (20 分)
2004年7月,Google在硅谷101号公路旁的巨型广告牌上张贴了招募信息(如下图所示)。内容非常简单,URL由自然常数的连续数字中的前10位质数组成e。可以找到该素数的人可以访问此网站,进入Google招聘流程的下一步。
自然常数 e是一个众所周知的超越数(超越数)。前几个数字是:e = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921 ...其中粗体的10位数字是Google问题的答案。
现在,您需要解决一个更普遍的问题:在任何给定的L数字编号的连续数字中找到第一个K数字质数。
输入规格:
每个输入文件包含一个测试用例。每个案例首先在一行中给出两个正整数:L(≤1,000)和K(< 10),分别是给定数字的位数和要找到的质数。然后在下一行给出L位数字N。
输出规格:
对于每个测试用例,请在一行中连续打印N个连续数字中的第一个K位素数。如果不存在此数字,则输出404
。注意:前导零也必须算作K位的一部分。例如,要在200236中找到4位数的质数,可以使用0023。但是,由于前导零不在原始数字中,因此不能将第一个数字2视为解决方案0002。
样本输入1:
20 5
23654987725541023819
样本输出1:
49877
样本输入2:
10 3
2468024680
样本输出2:
404
作者: 陈越
单位: 浙江大学
时间限制: 200 ms
内存限制: 64 MB
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <math.h>
#include <list>
#include <stack>
#include <queue>
#include <set>
#include <sstream>
using namespace std;
bool isPrime(int n){
if(n<=1){
return false;
}
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
int main(){
ios::sync_with_stdio(false);
int l,k;
cin>>l>>k;
string str;
cin>>str;
for(int i=0;i<=l-k;i++){
string s = str.substr(i,k);
stringstream ss;
ss<<s;
long long m;
ss>>m;
if(isPrime(m)){
cout<<s<<endl;
return 0;
}
}
cout<<404<<endl;
return 0;
}