[dmy737]质区间长度
质区间
埃氏筛/线性筛筛一遍,前缀和+二分查询即可
也有线性\(\mathcal O(n)\)作法,但没有二分容易实现,二分足矣。
注意特殊条件特判。
#include <bits/stdc++.h>
using namespace std;
int a[1000005];
bool vis[1000005];
int main() {
int l, r, k;
cin >> l >> r >> k;
for(int i = 2; i <= r; i++) {
if(i >= l && (!vis[i])) {
a[i - l + 1] = a[i - l] + 1;
}
else if(i >= l) a[i - l + 1] = a[i - l];
if(!vis[i]) {
for(int j = i + i; j <= r; j += i) vis[j] = 1;
}
}
int ans = -1;
for(int i = 1; i <= r - l + 1; i++) {
int x;
if(!vis[l + i - 1]) {
x = lower_bound(a + 1, a + r - l + 2, a[i] + k - 1) - a;
if(x == r - l + 2) break;
ans = max(ans, x - i + 1);
}
else {
x = lower_bound(a + 1, a + r - l + 2, a[i] + k) - a;
if(x == r - l + 2) break;
ans = max(ans, x - i + 1);
}
}
if(k == 0) cout << 1 ;
else if(l == r) cout << -1;
else cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号