题意
找到一串连续数字中最早出现的给定位数的一串质数
思路
枚举每个k位的子串,转换成整数,判断是否是素数
注意点
题目里有一个要求(测试点2错误原因)
Note: the leading zeroes must also be counted as part of the K digits. For example, to find the 4-digit prime in 200236, 0023 is a solution.
即输出一定是k位,有前导0也要输出,因此代码中stoi()
转换前用一个变量存下string子串t
,转换后判断是质数后,输出这个字符串t
即可
AC代码
#include <iostream>
#include <math.h>
using namespace std;
bool isprime(int n){
if(n<2) return false;
double sqr = sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0) return false;
}
return true;
}
int main(){
int l,k;
int num;
scanf("%d%d",&l,&k);
string s;
cin>>s;
if(s.length()<k) {printf("404");return 0;}
for(int i=0;i+k<=l;i++){
string t = s.substr(i,k);
num = stoi(t);
if(isprime(num)) {cout<<t;return 0;}
}
printf("404");
return 0;
}