疑惑 , 请大佬解释

P3383 【模板】线性筛素数

Gojo_Satoru2023 @ 2024-06-15 17:16:02

WA代码:

#include <bits/stdc++.h>
using namespace std ;
const int N = 1e8;
int n , m ; 
int mark[N] , p[N] , cnt ;
void prime(){
    for(int i = 2 ; i <= n ; i ++){
        if(!mark[i]){
            p[++cnt] = i ;
        }
        for(int j = 1 ; p[j] * i <= n ; j ++){
            mark[i * p[j]] = 1 ;
            if(i % p[j] == 0) {
                break ;
            }
        }
    }
}
int main(){
    cin >> n >> m ;
    prime();
    for(int i = 1 ; i <= m ; i ++){
        int x ;
        cin >> x ;
        cout << p[x] << "\n";
        continue ;
    }
    return 0 ;
}

AC代码:

#include <bits/stdc++.h>
using namespace std ;
const int N = 1e8;
int n , m ; 
int p[N] , mark[N] , cnt ;
void prime(){
    for(int i = 2 ; i <= n ; i ++){
        if(!mark[i]){
            p[++cnt] = i ;
        }
        for(int j = 1 ; p[j] * i <= n ; j ++){
            mark[i * p[j]] = 1 ;
            if(i % p[j] == 0) {
                break ;
            }
        }
    }
}
int main(){
    cin >> n >> m ;
    prime();
    for(int i = 1 ; i <= m ; i ++){
        int x ;
        cin >> x ;
        cout << p[x] << "\n";
        continue ;
    }
    return 0 ;
}

by Gojo_Satoru2023 @ 2024-06-15 17:16:23

这是为什么


by Gojo_Satoru2023 @ 2024-06-15 17:17:24

在线等 , 挺急的


by Ctrl_sku @ 2024-06-15 17:22:06

因为你菜


by Gojo_Satoru2023 @ 2024-06-15 17:23:55

@lili_dhc 别叫


by 解方橙 @ 2024-06-15 17:34:59

数组开小了,UB吧

@Gojo_Satoru2023


by abdmm_365 @ 2024-06-15 17:56:29

#include<bits/stdc++.h>
using namespace std;

int n,q,k,cnt;
int pri[10000010];
bool vis[100000010];
int main(){
    cin>>n>>q;
    vis[1] = true;
    for(int i=2;i<=n;i++){
        if(vis[i] == false) pri[++cnt] = i;
        for(int j=1;j<=cnt and i*pri[j]<=n;j++){
            vis[i*pri[j]] = true;
            if(i%pri[j] == 0) break;
        }
    }
    for(int i=1;i<=q;i++){
        scanf("%d",&k);
        printf("%d\n",pri[k]);
    }
    return 0;
}

by Gojo_Satoru2023 @ 2024-06-15 17:57:34

@解方橙 只是定义p数组和mark数组换了个位置


by 解方橙 @ 2024-06-15 18:11:45

@Gojo_Satoru2023

1e8的数组只开到99999999,如果n=1e8那么数组存不下就会访问别的数组的存储空间,所以数组的顺序对答案有影响

以及 @abdmm_365 谁问你了


by Gojo_Satoru2023 @ 2024-06-15 18:16:52

@解方橙 谢谢 , 已关


by abdmm_365 @ 2024-06-15 22:05:20

@解方橙 给大佬您鉴赏一下,没有人问


| 下一页