这道题就是容易想复杂,其实想明白很简单。
我的思路是,从 1 到 sqrt{n} 循环筛一下 完全平方数,再从 1 到 sqrt[3]{n} 循环筛一下 完全立方数,去掉重复的数字,然后输出 size。
为了方便去重,我们用 set
来存储筛出的数。
Code:
代码语言:javascript复制#include <iostream>
#include <cmath>
#include <set>
int t, n;
int main()
{
std::cin >> t;
while (t--)
{
std::cin >> n;
std::set <int> table;
for (int i = 1; i * i <= n; i )
{
table.insert(i * i);
}
for (int i = 1; i * i * i <= n; i )
{
table.insert(i * i * i);
}
std::cout << table.size() << std::endl;
}
return 0;
}