这道题就是容易想复杂,其实想明白很简单。

我的思路是,从 $1$ 到 $\sqrt{n}$ 循环筛一下 完全平方数,再从 $1$ 到 $ \sqrt[3]{n}$ 循环筛一下 完全立方数,去掉重复的数字,然后输出 size

为了方便去重,我们用 set 来存储筛出的数。

Code:

#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;
}
最后修改:2022 年 02 月 02 日
赠人玫瑰,手有余香。您的赞赏是对我最大的支持!