K-Number_牛客竞赛语法入门班数组栈、队列和stl习题 (nowcoder.com)
这个题先质数筛然后遍历所有的质数即可,因为质数比较少可以直接暴力。要记得质数筛的时候尽量要筛的大一点,不然可能会有情况不能遍历到。代码如下:
#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int N = 8e3 + 10;
int cnt = 0;
int pri[N];
bool st[N];
void solve()
{
int res = 0;
int n;
cin >> n;
set<int> S;
for (int i = 0; i < cnt; i++)
for (int j = 0; j < cnt; j++)
for (int k = 0; k < cnt; k++)
{
int uu = pri[i] * pri[i] + pri[j] * pri[j] * pri[j] + pri[k] * pri[k] * pri[k] * pri[k];
if (uu > n)
{
break;
}
S.insert(uu);
}
cout << S.size();
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
st[1] = true;
for (int i = 2; i <= 8000; i++)
{
if (!st[i])
{
pri[cnt++] = i;
for (int j = i + i; j <= 8000; j += i)
{
st[j] = true;
}
}
}
while (t--)
{
solve();
}
return 0;
}