1 条题解
-
2
【题目大意】给一个完全平方数的标准,推导出哪些是超级幸运数,然后判断 N个数字中,哪些是超级幸运数,是的输出“lucky”,不是的输出离该数字最近的比它大的数字。
【考纲知识点】数学知识,埃筛知识,循环知识
【解题思路】完全平方数按照定义,包括1,4,9,16,25……。超级幸运数还可以是完全平方数的倍数,因此 8,12,18……也是超级幸运数。数据范围比较大,1e6,用埃筛的模板,判断每一个数字是否是幸运数字。不是幸运数字的话,保留离它最近的幸运数字作为答案。最终完成整个查询。
【参考程序】
#include <bits/stdc++.h> using namespace std; const int N = 1001 * 1001; const double eps = 1e-8; bool is_lucky[N + 5]; int next_lucky[N + 5]; int main() { int a, T; cin >> a >> T; for (int i = 1; i <= N; i++) { int t = int(sqrt(i) + eps); if (i >= a && t * t == i) is_lucky[i] = 1; if (!is_lucky[i]) continue; for (int j = i + i; j <= N; j += i) { is_lucky[j] = 1; } } for (int i = N; i > 0; i--) next_lucky[i] = is_lucky[i] ? i : next_lucky[i + 1]; while (T--) { int x; cin >> x; if (is_lucky[x]) cout << "lucky" << endl; else cout << next_lucky[x] << endl; } }
- 1
信息
- ID
- 575
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 129
- 已通过
- 27
- 上传者