求助!
#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 求助大佬!