题目大意
本题希望我们判断一个整数是否为幸运数( ≥a\geq a≥a 的完全平方数,或为其整数倍的数),如果是,输出lucky,反之,输出大于它的最小幸运数。
算法分析
暴力思路就是在查询过程中判断是否为幸运数,如果不是,一个个往大的数找,直到找到幸运数,时间复杂度为 O(n2)O(n^2)O(n2) ,对于 2⋅1052\cdot10^52⋅105 的数据肯定过不了。因此我们先想到了预处理且类似于埃氏筛,以及二分查找。其中,对于二分查找,我们可以保证数据的单调性。
正确代码
复杂度分析
* 时间复杂度:预处理复杂度为 O(N)O(N)O(N) ,查询复杂度为 O(n logN)O(n\ logN)O(n logN) ,整体为 O(n logN)O(n\ logN)O(n logN) ,可通过本题
* 空间复杂度:O(N)O(N)O(N),也可接受
* 预计得分:100pts100pts100pts
注:本题ACGO数据较水,建议以洛谷为准