素数个数
【题目描述】求n到n+m内的素数个数
【解题报告】
“数论题目有时复杂度看着很大,实际上并没有那么大”
详见代码
#include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1e6 + 3; ll n, m, pr[N], tot, s[N]; bool vis[N]; int main() { int T; scanf("%d", &T); while (T--) { scanf("%lld%lld", &n, &m); memset(vis, 0, sizeof vis); tot = m + 1; for (ll i = 2; i <= 1e6 && i <= n + m; i++) for (ll j = (n / i) * i; j <= n + m; j += i) //保证跳到的都是合数 if (j >= n && j != i && !vis[j - n]) { vis[j - n] = 1; tot--; //素数的个数等于总数-合数 } printf("%lld\n", tot); } return 0; }