Codeforces 1474B. B. Different Divisors
原题链接
简单
作者:
蓬蒿人
,
2022-03-17 22:51:06
,
所有人可见
,
阅读 243
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
//1474B
//题目大意
//T组读入 每组一个d 1<=d<=1e4
//要求输出一个数 这个数至少有四个因数 且每个因数的差>=d
/*----------------解题思路--------------------*/
// 观察样例可知 四个因数包括1和答案本身
// 所以 只要找到满足条件的中间两个因数就能得到答案
// 尝试了ans=(1+d)*(2d+1)的方案 失败告终
// 随后发现 上面的方案是会存在其他因数的 由此会导致因数间的差小于d
// 那么就是要找到某两个因数 p,q p-1>=d q-p>=d p*q还不能有除了1 小于q的因数
// 那么pq只要是质数就能满足条件
// 说干就干 质数筛筛出质数 随后找到>=1+d的第一个质数p
// 再找到q p*q就是答案
typedef long long ll;
const int N = 5e4+10;
int T,n;
int cnt,primes[N];
bool st[N];
void get_primes(int n){
for (int i=2;i<=n;i++){
if (!st[i]) primes[cnt++]=i;
for (int j=0;primes[j]<=n/i;j++){
st[primes[j]*i]=1;
if (i%primes[j]==0) break;
}
}
}
int main(){
get_primes(5e4);
scanf("%d", &T);
while (T--){
int d;
scanf("%d", &d);
ll l,r;
l=0;
while (primes[l]-1<d) l++;
r=l+1;
while (primes[r]-primes[l]<d) r++;
ll ans=primes[l];
printf ("%lld\n",ans*primes[r]);
}
return 0;
}