当前位置: 首页 > news >正文

C++数学-数论筛质数经典OJ题流食般投喂

先做题自己思考,再看解析呦~


OJ题来源:洛谷

OJ题名:素数密度

OJ题归属:数学-数论【筛质数】

解题算法:线性筛、埃氏筛

🐻算法原理:

🐻借助素数的判定中用试除法从 [1,sqrt r] 进行试除的原理,在筛质数里面,我们可以用 [1,sqrt r] 中的质数去筛掉 [l,r] 里面的合数。

🐻在对区间 [l,r] 进行筛质数时,要合理映射下标~

🐻筛质数时,我们要从质数的 “合理倍数” 那个数开始筛。

🦓题目细节:

🦓测试用例会给 L == 1,但是 1 既不是质数也不是合数,要特判,给 1 的话,要映射到 2.

🦓筛质数时,“合理倍数” 不能是 1 倍,那样就要筛去质数本身了。特判,最小倍数得是 2 倍。

#include<iostream> #include<cmath> using namespace std; typedef long long LL; const int N = 1e6 + 10; int l, r; bool st[N]; int p[N], cnt; bool ret[N]; void get_prime() { int n = sqrt(r); for (int i = 2; i <= n; i++) { if (!st[i]) p[++cnt] = i; for (int j = 1; 1ll * i * p[j] <= n; j++) { st[i * p[j]] = true; if (i % p[j] == 0) break; } } } int main() { cin >> l >> r; // 细节 1 l = l == 1 ? 2 : l; get_prime(); for (int i = 1; i <= cnt; i++) { LL x = p[i]; // 细节 2 for (LL j = max((l + x - 1) / x * x, 2 * x); j <= r; j += x) { ret[j - l] = true; } } int sum = 0; for (int i = l; i <= r; i++) { if (!ret[i - l]) sum++; } cout << sum << endl; return 0; }

OJ题来源:洛谷

OJ题名:Goldbach's Conjecture (哥德巴赫猜想)

OJ题归属:数学-数论【筛质数】

解题算法:线性筛

🐻算法原理:

🐻先用线性筛筛出题目指定范围的质数;

🐻两个质数差值最大,就是遍历 p数组 从小质数到大质数遍历,第一个符合题目条件的就是两个差值最大的质数,如何判断,n - a = b,看看 b 这个质数有没有被标记上,没有就是质数,st[n - a] = false。

#include<iostream> #include<cstring> using namespace std; typedef long long LL; const int N = 1e6 + 10; int n; bool st[N]; int p[N], cnt; // 预处理出质数 void get_prime() { for (LL i = 2; i <= 1e6; i++) { if (!st[i]) p[++cnt] = i; for (LL j = 1; i * p[j] <= 1e6; j++) { st[i * p[j]] = true; if (i % p[j] == 0) break; } } } int main() { get_prime(); while (cin >> n, n != 0) { bool flag = false; int x = 0, y = 0; for (int i = 2; i <= cnt; i++) { int a = p[i], b = -1; if (st[n - a] == false) // 关键特判 { flag = true; b = n - a; x = a, y = b; break; } } if (flag == false) cout << "Goldbach's conjecture is wrong." << endl; else cout << n << " = " << x << " + " << y << endl; } return 0; }
http://www.cnnetsun.cn/news/3127197.html

相关文章:

  • 【MATLAB例程】二维平面下,多目标定位,采用4个基站的AOA+测距辅助定位,MATLAB代码。付完整可运行的m文件下载链接
  • 图论在社交网络分析中的3个核心应用:从理论到NetworkX实战
  • 健康知识-知识普及说明API介绍
  • SpringBoot+微信小程序开发电商书店全栈实战
  • 强化学习(RL)
  • Android 高级工程师面试:Java 基础知识 近1年高频追问 22 题
  • Prometheus的告警数据上传指定api接口
  • 两大智驾强制国标报批稿公示,仿真测试成高阶智驾“安全准入门票”
  • 7 月 15 日起,追踪影视的 TV Time 应用停服,难盈利成主因
  • 小程序商城制作工具实测对比:餐宝盈/BBWEYY/比文云/Jasper Chat/Chatsonic(2026年7月更新)含零代码SAAS、AI编程、源码定制交付
  • AI服务选型实战:Token计费、模型调度与Obsidian工作流优化
  • 机械手技术解析:从核心部件到行业应用全景
  • Java SHA256加密实战:从原理到密码存储与API签名的完整指南
  • 证件照还要去照相馆?这款免费AI抠图工具,在家就能做出标准证件照
  • 【C++】008、sizeof与strlen的区别
  • 总线舵机技术解析与应用实践
  • 热成像车辆行人数据集 目标检测数据集
  • AI大模型实战选型指南:ChatGPT、Gemini、Claude、Grok工作流适配策略
  • 【EIS芯片应用专题之二】SENSIPLUS DCMU深度解读:面向锂离子电池的紧凑低功耗ASIC芯片在线高分辨率EIS
  • 百度抓取诊断:你的网站侦察兵
  • UVa 479 Irrigation Flow Rates
  • HoRain云--C++多线程编程
  • 《唤醒你的AI同事:WorkBuddy从零上手》035:工作流程优化
  • 长文档总结不卡顿,128k 上下文在 Strix Halo 上的表现
  • Gemini 1.5与GPT-4o真实对比:大模型选型的技术逻辑与落地实践
  • 垃圾短信识别项目深度复盘:中文文本分类全流程实战 + 3 个数据泄漏避坑指南
  • AI赋能非技术行业实战:我用DeepSeek+混元整理了2026河北高考志愿填报完整指南
  • DeepSeek 开源 DSpark,一个可将 LLM 推理速度提升高达 85% 的新框架
  • 【ROS】 ros学习日记(1)
  • swagger增强knife4j