_madeline_ @ 2024-11-27 10:38:36
#include <iostream>
#include <malloc.h>
#include <string.h>
using namespace std;
int qr();
int main(){
int n=qr(),q=qr();
bool *isPrime=(bool*)malloc(sizeof(bool)*1e8);
memset(isPrime,1,sizeof(bool)*1e8);
int *prime=(int*)malloc(sizeof(int)*1e7);
int index=0;
for(int i=2;i<n;i++){
if(isPrime[i])prime[++index]=i;
for(int j=1;j<=index&&prime[j]*i<n;j++){
isPrime[prime[j]*i]=false;
if(i%prime[j]==0)break;
}
}
int num=0;
for(int i=0;i<q;i++){
num=qr();
cout<<prime[num]<<endl;
}
}
int qr(){
int res=0;
char mid=getchar();
while(mid<='9'&&mid>='0'){
res*=10;
res+=mid-'0';
mid=getchar();
}
return res;
}
by Kazeno_Akina @ 2024-11-27 11:06:13
@madeline prime[j]*i
不开 long long
导致的。
by _madeline_ @ 2024-11-27 19:29:21
@Kazeno_Akina改了之后还不太行。。。
每个测试点都显示第一行第一个是0,但是本机测试没问题
by Kazeno_Akina @ 2024-11-27 22:14:47
@madeline
不是哥们谁教你这么写快读的
在你那个 while(mid<='9'&&mid>='0')
前面加一句 while(mid>'9'||mid<'0') mid=getchar();
才是对的
by _madeline_ @ 2024-11-27 22:57:19
@Kazeno_Akina 谢谢谢谢ORZ
好像之前我也遇到过这种格式原因,当时没在意,太怠惰了(悲)