全WA求调

P3383 【模板】线性筛素数

_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

好像之前我也遇到过这种格式原因,当时没在意,太怠惰了(悲)


|