1 条题解
-
0
我们蒟蒻写暴力依旧徐徐渐进直接暴力枚举拿到10pts。
#include <bits/stdc++.h> using namespace std; bool f(int x); int main(){ int l,r; int cnt = 0; cin >> l >> r; for(int i = l;i<=r;++i){ if(f(i)){ ++cnt; } } cout<<cnt<<endl; } bool f(int x){ int c = 0; for(int i = 2;i<x;++i){ if(x % i == 0){ ++c; } } if(c!=0){return false;} else {return true;} }即使一顿优化也只能到40pts的水平。
#include <bits/stdc++.h> using namespace std; bool f(int x); int main(){ cin.tie(0)->sync_with_stdio(0); long long l,r; int cnt = 0; cin >> l >> r; for(int i = l;i<=r;++i){ if(f(i)){ ++cnt; } } cout<<cnt<<'\n'; } bool f(int x){ if (x <= 1) return 0; if (x == 2) return 1; if (x % 2 == 0) return 0; for(int i = 2;i<=sqrt(x);++i){ if(x % i == 0){ return 0; } } return 1; }所以直接套筛法草过去
#include <bits/stdc++.h> using namespace std; #define ll long long void sieve(ll l, ll r) { vector<bool> p(r - l + 1, 1); if (l == 1) p[0] = 0; for (ll i = 2; i * i <= r; ++i) { ll start = max(i * i, ((l + i - 1) / i) * i); for (ll j = start; j <= r; j += i) { p[j - l] = 0; } } int cnt = 0; for (ll i = l; i <= r; ++i) { if (p[i - l]) cnt++; } cout << cnt << '\n'; } int main() { cin.tie(0)->sync_with_stdio(0); ll l, r; cin >> l >> r; sieve(l, r); }
信息
- ID
- 5890
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 226
- 已通过
- 26
- 上传者