题意:规定正整数x称为正整数y的除数,如果y可以被x整除而没有余数。例如,1是7的除数,3不是8的除数。给一个整数d,让你找到最小的正整数a。
a满足两个条件:a至少有4个除数;a的任意两个除数之差至少是d。
题解:可以看出a一定有1和它本身两个除数,所以另外两个除数一定>=1+d并且a-d>=另外两个除数。注意 如果这两个除数之间存在公约数,则这个公约数也一定是a的除数,可能就不满足任意两个除数只差>=d的条件。如果是素数则不会出现上述情况。因此先开一个素数数组,然后取两个素数,第一个>=1+d,第二个>=第一个+d,这两个数之和即答案。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define INF 0x3f3f3f3f
const int N=2e6+50;
ll n,m;
map<int,int>mp;
int cmp(int a,int b)
{
return a>b;
}
int p[N];
int vis[N];
void init()
{
int k=0;
for(int i=2;i<=N;i++)
{
if(vis[i]) continue;
for(int j=i;j<=N;j+=i)
{
vis[j]=1;
}
p[k]=i;
k++;
}
}
int main()
{
ll t;
cin>>t;
init();
while(t--)
{
cin>>n;
ll tt=1+n,faa=0,fa=INF;
ll ans=1;
for(int i=0;i<=N;i++)
{
if(p[i]>=tt&&faa==0)
{
ans*=p[i];fa=p[i]+n;
faa=1;
// cout<<tt<<" "<<p[i]<<endl;
}
if(p[i]>=fa)
{
ans*=p[i];
break;
}
}
cout<<ans<<endl;
}
return 0;
}