Number 牛客题解

本文介绍了如何使用C++解答牛客竞赛中关于数组、栈和队列的题目,涉及质数筛法,建议在筛质数时覆盖更大范围以确保遍历所有可能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值