恶心之处在于有一处要判i < tot
// code of JUYU ^ ^ never doubt youself !
#include <bits/stdc++.h>
typedef long long ll;
#define int ll
#define For(i,a,b) for (int i = a; i <= b; i ++)
#define Dow(i,a,b) for (int i = b; i >= a; -- i)
using namespace std;
typedef pair<int,int> PII;
const int mod = 998244353;
const int MOD = 1000000007;
const int maxn = 1e6 + 5;
inline ll read()
{
ll t = 0, dp = 1; char c = getchar();
while(!isdigit(c)) {if (c == '-') dp = -1; c = getchar();}
while(isdigit(c)) t = t * 10 + c - 48, c = getchar();
return t * dp;
}
inline void write(ll x){if (x < 0){putchar('-'); x = -x;} if(x >= 10) write(x / 10); putchar(x % 10 + 48);}
inline void writeln(ll x){write(x); puts("");}
inline void write_p(ll x){write(x); putchar(' ');}
inline void write_b(ll x){putchar(' '); write(x);}
inline int qpow(int x, int y, int z){int ret = 1; for (; y; y /= 2, x = x * x % z) if (y & 1) ret = ret * x % z; return ret;}
inline int PrimeInv(int x, int y, int z){return qpow(x, y - 2, z);}
bool NotPrime[maxn];
int Prime[maxn];
int vis[maxn];
int tot;
inline void EulerSieve()
{
for (int i = 2; i <= maxn; i ++)
{
if (!NotPrime[i]) Prime[tot ++] = i;
for (int j = 0; Prime[j] <= maxn / i; j ++)
{
NotPrime[i * Prime[j]] = true;
if (i % Prime[j] == 0) break;
}
}
}
signed main()
{
EulerSieve();
int T = read();
while (T --)
{
int l = read(), r = read();
vis[0] = l == 1;
for (int i = 0; i < tot and Prime[i] <= r; i ++) // 就是这
{
for (int j = l / Prime[i]; j <= r / Prime[i]; j ++)
{
if (j == 1) continue;
if (j * Prime[i] >= l) vis[j * Prime[i] - l] = 1;
}
}
vector<int> ans;
for (int i = l, j = 0; i <= r; i ++, j ++)
{
if (!vis[j]) ans.push_back(j);
vis[j] = 0;
}
if (ans.size() < 2) puts("There are no adjacent primes.");
else
{
int mn = 2147483647, mx = 0, p1, p2, t1, t2;
for(int i = 1; i < ans.size(); i ++)
{
if (ans[i] - ans[i - 1] < mn)
{
mn = ans[i] - ans[i - 1];
p1 = ans[i - 1] + l;
p2 = ans[i] + l;
}
if (ans[i] - ans[i - 1] > mx)
{
mx = ans[i] - ans[i - 1];
t1 = ans[i - 1] + l;
t2 = ans[i] + l;
}
}
printf("%lld,%lld are closest, %lld,%lld are most distant.\n", p1, p2, t1, t2);
}
}
return 0;
}
/* stuff you should look for
* int overflow, array bounds
* special cases (n=1?)
* do smth instead of nothing and stay organized
* WRITE STUFF DOWN
* DON'T GET STUCK ON ONE APPROACH
-- Benq
*/
大佬
# 聚聚考研加油!!!!!