专栏文章
ABC400E题解
AT_abc400_e题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mippdtq4
- 此快照首次捕获于
- 2025/12/03 15:46 3 个月前
- 此快照最后确认于
- 2025/12/03 15:46 3 个月前
不难发现,当每个质因数的指数为偶数时,这个数一定是一个平方数。
因此 数一定是平方数。则从 到 中 数的个数最多有 个。又可以发现,所有 数开根号后有且仅有 个质因子,且开根号后范围为 。因此我们可以预处理出所有 数开根号后的数。
现在思考怎么预处理。我们可以先记录 到 中所有数的质因子个数,这个可以在埃氏筛的过程中求出。然后将所有质因子数量为 的数平方后添加到一个数组中,这样这个数组中所有数都是 数。最后在这个数组中二分查找即可。
因此 数一定是平方数。则从 到 中 数的个数最多有 个。又可以发现,所有 数开根号后有且仅有 个质因子,且开根号后范围为 。因此我们可以预处理出所有 数开根号后的数。
现在思考怎么预处理。我们可以先记录 到 中所有数的质因子个数,这个可以在埃氏筛的过程中求出。然后将所有质因子数量为 的数平方后添加到一个数组中,这样这个数组中所有数都是 数。最后在这个数组中二分查找即可。
代码
CPP#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1000005];
vector<ll> v; //将所有 400 数存到这里
int main()
{
for(int i = 2;i <= 1000000;i++)
{
if(a[i] == 0)
{
for(int j = i;j <= 1000000;j+=i)
{
a[j]++;
}
}
}
for(ll i = 2;i <= 1000000;i++)
{
if(a[i] == 2)
{
v.push_back(i*i);
}
}
int T;
scanf("%d", &T);
while(T--)
{
ll n;
scanf("%lld", &n);
printf("%lld\n", *prev(upper_bound(v.begin(), v.end(), n)));
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...