B3929题解
what_can_I_do · · 题解
传送门
最近越来越拉了。
由于
首先先从大于等于
接下来倒着枚举所有数字,用
询问直接判断如果该数字有被标记输出 lucky,否则输出已经记录好的比该数字大的最近的完全平方数。
CODE:
#include<bits/stdc++.h>
using namespace std;
int a,n;
int b[1002010]={0},la=1002001;
int main()
{
scanf("%d%d",&a,&n);
for(register int i=ceil(sqrt(a*1.0));i*i<=1002001;i++)
for(register int j=1;j*i*i<=1002001;j++)
b[j*i*i]=j*i*i;
for(register int i=1002000;i>=1;i--)
if(b[i]==i) la=i;
else b[i]=la;
while(n--)
{
int x;
scanf("%d",&x);
if(b[x]==x) puts("lucky");
else printf("%d\n",b[x]);
}
return 0;
}