大神们求助啊!!!
E 潜伏
Time Limit:1000MS Memory Limit:65535K
题型: 编程题 语言: 无限制
描述
终于,OYY从队友提供的名单中找到了心仪的MM. 但是,他担心MM不喜欢他,于是他利用自己强大的编程能力写了一个潜伏软件,监控MM的网络访问记录,以查看MM是否有在网络上查询自己。 现在OYY得到了MM的网络记录,但是他太紧张了,而写不出一个程序去查找,于是他需要你的帮忙。 MM的聊天记录长度为N(1 <= N <= 100000),全部由数字构成,而OYY需要多次查询在该记录的第i位后出现的第一个两位素数。
输入格式
第一行,一个全部由数字构成的字符串,长度小于100000。 第二行,一个整数M(1 <= M <= 100000),表示OYY查询的次数。 第3 … M+2行,每行一个数字Pi(Pi保证不会超过给出字符串的长度且大于零),请求出Pi后一个出现的两位素数。
输出格式
每个询问一行,输出题目要求的素数,如果不存在输出“-1”。
输入样例
123185154231234984181212132123 6 3 5 8 13 21 30
输出样例
31 23 23 23 13 -1
Provider
a470086609 from SCAU
我错的地方是不知道怎么把字符串中的数字转换成整型,然后不知道怎么结束找到符合条件的素数之后的结束。
个人代码:
#include <stdio.h>
#include <math.h>
#include <string.h>
char s[100005];
int prime(int n)
{
int j,k;
k = sqrt(1.0*n);
for(j=2; j<k; j++)
{
if(n%j == 0) return 0;
}
return 1;
}
int two(int m)
{
if(m>=10) return 1;
else return 0;
}
int main()
{
int m,i,j,len;
int k,k1,k2;
while(gets(s))
{
len = strlen(s);
scanf("%d",&m);
while(m--)
{
scanf("%d",&i);
for(j=i-1; j<len; j++)
{
k1 = (int)s[j];
k2 = (int)s[j+1];
k = 10*s[j]+s[j+1];
//printf("%d,%d,%d\n\n",k1, k2, k);
if(prime(k) && two(k))
{
printf("%d\n",k);
//这里不知道怎么结束单次输出
}
}
printf("-1\n");
}
}
return 0;
}
求解!