思路
题目的大意很简单, 在L长度的数字字符串中找到第一个k长度的素数. 如果找不到哦啊返回404
, 找到了返回这个k长度的字符串.
一个简单暴力的思路就是遍历L长度, 检查从这个字符起往后k长度的字符串表示的数字是否是素数.
测试点:
// 样例测试点
20 5
23654987725541023819
// 样例测试点
10 3
2468024680
// 当L 小于k时, 返回`404`
5 6
00523 // 404
// k长度的字符串包含前导0时, 输出的时候要包含前导0, 测试点3
5 2
00021 // 02
**其他问题 ** k < 10 但是还是可能超过int的表示范围, 所以采用long int更保险, 在pta判题系统里, long int和int都是32bit, 只有long long int是64bit, 故采用long long
代码
#include<iostream>
#include<vector>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
char seq[1005];
int n, k;
bool isprime(ll n) {
if (n < 2) return false;
if (n == 2) return true;
for (ll i = 2;i <= (int)sqrt((double)n); i++) {
if (n % i == 0) return false;
}
return true;
}
ll stoint(char *s, int k) {
char* p = s;
ll sum = 0;
while (k--) {
sum = sum * 10 +(*p - '0');
p++;
}
return sum;
}
int main() {
scanf("%d%d", &n, &k);
scanf("%s", seq);
ll temp;
bool flag = false;
for (int i = 0; i <= n-k && !flag; i++){
temp = stoint(seq + i, k);
if (isprime(temp)) flag = true;
}
if (flag) printf("%.*d", k, temp);
else printf("404");
return 0;
}
总结
审题还是不够仔细, 如果能够看到这句话to find the 4-digit prime in 200236, 0023 is a solution
的话, 应该就能想到前导零的问题, 2分就这样丢了.