题目
参考
题意:给定一个数d,求一个最小的整数a,使得其
1、a至少有4个因子
2、a的任何两个因子相差大于等于d。
思路:任何一个数,其因子至少有1和它本身。设a刚好有4个因子,有两种情况, p 3 p^3 p3或 p ∗ q p*q p∗q( p , q p,q p,q为素数)。可以证明,如果因子数更多,不是最优解。假设 p k ( k > 3 ) p^k(k>3) pk(k>3)是满足题意的数,那么 p 3 p^3 p3也满足题意且 p 3 p^3 p3< p k p^k pk。所以最小值为 m i n ( p ∗ q , p 3 ) min(p*q,p^3) min(p∗q,p3)。
#include <iostream>
#include <vector>
using namespace std;
void solve()
{
int x;
cin >> x;
vector<int> p;
for (int i = x + 1; ; i++)
{
int t = 1;
for (int j = 2; j * j <= i; j++)
{
if (i % j == 0)
{
t = 0;
break;
}
}
if (t)
{
p.push_back(i);
break;
}
}
for (int i = p.back() + x; ; i++)
{
int t = 1;
for (int j = 2; j * j <= i; j++)
{
if (i % j == 0)
{
t = 0;
break;
}
}
if (t)
{
p.push_back(i);
break;
}
}
cout << min(1ll * p[0] * p[1], 1ll * p[0] * p[0] * p[0]) << "\n";
}
int main()
{
int t;
cin >> t;
while (t--)
{
solve();
}
}