CSP.ac #60
质数求和(T1-20)
如果看不了请登入,如果还看不了就是你没去qbxt
很简单的一道区间筛的题目
题目大体意思:给你L,R,求[L,R] 的素数之和
对于 100%的数据,1<=L<=R<=10^9,R-L<=1000
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#define int long long
#define db double
#define rr register
#define inf 1e9
using namespace std;
const int MAXN = 1e6 + 5;
inline int read() {
int s = 0, f = 0;
char ch = getchar();
while (!isdigit(ch)) {f |= ch == '-'; ch = getchar();}
while (isdigit(ch)) {s = s * 10 + (ch ^ 48); ch = getchar();}
return f ? -s : s;
}
int l, r, tot, ans;
int prime[MAXN], a[MAXN], vis[MAXN];
inline int orao() {
for (rr int i = 2; i <= 50000; i++) {
if (!vis[i])
prime[++tot] = i;
for (rr int j = 1; j <= tot; j++) {
if (prime[j] * i > 50000)
break;
vis[prime[j] * i] = 1;
if (i % prime[j] == 0)
break;
}
}
}
signed main() {
orao();
l = read();
r = read();
for (rr int i = 1; i <= tot; i++) {
int q = max(2 * 1ll, (l - 1ll) / prime[i] + 1ll) * prime[i];
for (rr int j = q; j <= r; j += prime[i])
if (j - l >= 0)
a[j - l] = 1;
}
for (rr int i = 0; i <= r - l; i++)
if (!a[i])
ans += i + l;
cout << ans;
}
时间会刺破青春表面的彩饰,会在美人的额上掘深沟浅槽;会吃掉稀世之珍!天生丽质,什么都逃不过他那横扫的镰刀。
博主写的那么好,就不打赏一下么(打赏在右边)