news 2026/7/4 4:10:31

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 4:06:12

【MATLAB例程】二维平面下,多目标定位,采用4个基站的AOA+测距辅助定位,MATLAB代码。付完整可运行的m文件下载链接

原创程序,请勿翻卖 文章目录 程序简介 程序功能 误差评价指标解释 运行结果 MATLAB源代码 相关方向 程序简介 程序功能 本代码实现了基于到达角度(AOA, Angle of Arrival) 的二维平面多目标定位,测距信息作为辅助增强手段。程序在 4 个基站、8 个目标的场景下对比两种方案…

作者头像 李华
网站建设 2026/7/4 4:05:44

图论在社交网络分析中的3个核心应用:从理论到NetworkX实战

图论在社交网络分析中的3个核心应用&#xff1a;从理论到NetworkX实战社交网络已经成为现代社会中不可或缺的一部分&#xff0c;从Facebook的好友关系到Twitter的关注网络&#xff0c;再到LinkedIn的职业连接&#xff0c;这些平台都构建在复杂的网络结构之上。理解这些网络的结…

作者头像 李华
网站建设 2026/7/4 4:04:57

健康知识-知识普及说明API介绍

前言 大众日常养生、疾病科普、饮食调理、居家护理时&#xff0c;常需要权威易懂的健康科普内容&#xff0c;自行搜集资料存在信息杂乱、内容陈旧、来源不规范等问题。聚美健康知识接口整合海量标准化健康科普素材&#xff0c;覆盖养生食疗、常见病护理、母婴健康、中老年保健、…

作者头像 李华
网站建设 2026/7/4 4:02:47

SpringBoot+微信小程序开发电商书店全栈实战

1. 项目概述这个微信小程序书店项目基于SpringBoot后端开发&#xff0c;提供了完整的文档和源码。作为一个典型的电商类小程序开发案例&#xff0c;它涵盖了从用户授权、商品展示到订单管理的完整业务流程。项目采用前后端分离架构&#xff0c;前端使用微信小程序原生开发框架&…

作者头像 李华
网站建设 2026/7/4 4:00:03

强化学习(RL)

预训练和指令微调&#xff08;SFT&#xff09;让模型学会了知识并掌握了对话格式&#xff0c;但这还不够。模型可能会给出极其啰嗦的回答&#xff0c;或者一本正经地胡说八道&#xff08;幻觉&#xff09;。强化学习&#xff08;RL&#xff09;&#xff0c;特别是人类反馈强化学…

作者头像 李华
网站建设 2026/7/4 3:59:04

Android 高级工程师面试:Java 基础知识 近1年高频追问 22 题

文章目录学习建议基础层&#xff08;8 题&#xff09;#1 和 equals 有什么区别&#xff1f; &#x1f525;标准回答面试官可能继续追问#2 equals 和 hashCode 的契约是什么&#xff1f; &#x1f525;标准回答面试官可能继续追问#3 ArrayList 和 LinkedList 怎么选&#xff1f…

作者头像 李华