[原题链接](Problem - B - Codeforces)
找规律,最后会发现是间隔大于等于d的两个质数的积。可以先打表,然后再用二分查找找到对应的下标,输出答案即可。
#include<bits/stdc++.h>
using namespace std;
#define io ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
bool judge(int x){
for(int i = 2; i <= sqrt(x); i++)
if(x % i == 0) return 0;
return 1;
}
const int N = 100100;
int prime[N];
int k = 1;
void init(){
prime[0] = 2;
for(int i = 3; i < N; i++){
if(judge(i)) prime[k++] = i;
}
}
int t, n, m;
int main(){
io;
init();
cin >> t;
while(t--){
cin >> n;
int a = lower_bound(prime, prime + k, n + 1) - prime;
int b = lower_bound(prime + a, prime + k, n + prime[a]) - prime;
long long ans = prime[a] * prime[b];
cout << ans << endl;
}
return 0;
}
Codeforces Round #696 (Div. 2) B. Different Divisors
原文:https://www.cnblogs.com/FrankOu/p/14300830.html