一个简单的素数判断,不要写错啦
测试点2和5考察的是出现前导零的情况:
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. However the first digit 2 must NOT be treated as a solution 0002 since the leading zeroes are not in the original number.
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define LL long long
using namespace std;
int n, m;
char s[1010];
LL changeToNum(int a, int b) {
LL ans = 0;
for (int i = a; i <= b; ++i) {
ans = ans * 10 + (LL)(s[i] - '0');
}
return ans;
}
int isPrime(LL num) {
for (LL i = 2; i <= (LL)sqrt((double)num); ++i) {
if (num % i == 0) return 0;
}
return 1;
}
void prt(LL num, LL p) {
while (p) {
printf("%lld", num / p);
num %= p;
p /= 10;
}
}
int main()
{
scanf("%d%d", &n, &m);
scanf("%s", &s);
if (strlen(s) < m) {
printf("404");
return 0;
}
LL num = changeToNum(0, m - 1);
LL p = 1;
for (int i = 1; i < m; ++i) p = p * 10;
if (isPrime(num)) {
prt(num, p);
return 0;
}
for (int i = m; i < strlen(s); ++i) {
num = num % p;
num = num * 10 + (LL)(s[i] - '0');
if (isPrime(num)) {
prt(num, p);
return 0;
}
}
printf("404");
return 0;
}