给出一个数 d,要求构造一个数 n ,要求 n 保证至少有 4 个因数,且每个因数的差值都要大于等于 d
首先 1 一定是因数,按照贪心下一个因数最小是 1+d,第二个因数是 1+2d,那么答案是 (1+d)*(1+2d),加上本身一共四个因数 ,这样答案显然是不对的,如果 d 是奇数,那么一定存在 2,所以打破了这个规律
我们要找的是质数,这样可以保证 d+1 至 2d+1 之间没有任何因数,所以找到质数 x,y,使得 x-1>=d 和 y-x>=d即可,x*y 即为答案
const int N=1e5+5;
int n,m;
int i,j,k;
int a[N];
int prime[N],num;
bool vis[N];
void init()
{
num=1;
prime[1]=1;
for(ll i=2;i<N;i++){
if(!vis[i]){
prime[++num]=i;
for(ll j=i*i;j<N;j+=i){
vis[j]=1;
}
}
}
}
int main()
{
init();
rush(){
cin>>n;
int pos=lower_bound(prime+1,prime+1+num,n+1)-prime;
int x=prime[pos];
pos=lower_bound(prime+1,prime+1+num,x+n)-prime;
int y=prime[pos];
cout<<x*y<<endl;
}
//PAUSE;
return 0;
}