输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。
输出格式:
在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;但第一位 2 不能被当成 0002 输出,因为在原始数字中不存在这个 2 的前导零。
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
long long int number(char *p,int iK){//将存放在字符数组中的数字组装起来
long long int number=0;
for(int i=1;i<=iK;i++)
{
int c;
c=(*p-'0');
number+=c*pow(10,iK-i);
p++;
}
return number;
}
long long int prime(long long int n){//判断是否为质数
if(n<3)
{
return 0;
}
if(n==3)
{
return 1;
}
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
return 0;}
}
return 1;
}
int main(){
int iL,iK;//输入参数
cin>>iL>>iK;
char n[iL];
cin>>n;
char *p=n;
for(int i=0;i<iL+1-iK;i++)
{
long long int num=number(p,iK);
if(prime(num)==1)
{
cout<<setfill('0')<<setw(iK)<<num<<endl;
return 0;
}
p++;
}
cout<<"404";
return 0;
}