后3个点RE了!求助!
查看原帖
后3个点RE了!求助!
754438
Maxwell1楼主2024/8/14 14:11

求助!

#include<bits/stdc++.h>
using namespace std;
int n;
const int MAXN = 1e4 + 3;
int prime[MAXN];
int cnt = 0;
int flag[MAXN];

void shai() {
    for(int i = 2; i <= n; ++i) {
        if(!flag[i]) prime[++cnt] = i;
        for(int j = 1; j <= cnt; ++j) {
            if(flag[i * prime[j]]) break;
            flag[i * prime[j]] = 1;
        }
    }
}

void build(int u) {
    //cout << u << ":";
    for(int i = 1; i <= cnt; ++i) {
        while(u % prime[i] == 0) {
            flag[prime[i]]++;
            u /= prime[i];
            //cout << i << " ";
        }
        if(u == 0)
            break;
    }
    //cout << endl;
}

int main() {
    scanf("%d", &n);
    memset(flag, 0, sizeof(flag));
    shai();/*
    for(int i : prime)cout << i << " ";
    cout << endl;*/
    memset(flag, 0, sizeof(flag));
    for(int i = 2; i <= n; ++i) {
        build(i);
    }
    //for(int i = 2; i <= n; ++i) cout << flag[i]<< " ";
    //cout << endl;
    for(int i = 1; i <= cnt; ++i) {
        if(flag[prime[i]]) {
            printf("%d %d\n", prime[i], flag[prime[i]]);
        }
    }
    return 0;
}

用的线性筛,筛出2-n所有素数之后2到n逐个查找,再把质数加到flag里面

样例是过了,交上去之后是后三个点runtime error 求助大佬!

2024/8/14 14:11
加载中...