埃氏筛
2026-09-19 09:00:01
发布于:广东
1阅读
0回复
0点赞
题解
埃氏筛 + 判断。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
int n, m, a, cnt;
vector<bool> sieve(int n) {
vector<bool> is_prime(n + 1, true);
if (n >= 0) is_prime[0] = false;
if (n >= 1) is_prime[1] = false;
for (int i = 2; 1LL * i * i <= n; i++) {
if (is_prime[i]) {
for (long long j = 1LL * i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
return is_prime;
}
bool IsPrime(int x, const vector<bool>& is_prime) {
return x >= 0 && x < (int)is_prime.size() && is_prime[x];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
vector<bool> is_prime = sieve(maxn);
for (int i = 1; i <= n; i++) {
cin >> a;
if (m == 0 || (m < a && IsPrime(a, is_prime))) {
cout << cnt << '\n';
return 0;
}
if (IsPrime(a, is_prime) && m >= a) {
m -= a; cnt++;
if (m == 0) {
cout << cnt << '\n';
return 0;
}
}
}
cout << cnt << endl;
return 0;
}
这里空空如也





有帮助,赞一个