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

数论1:整除、同余、质数筛

1.整除关系是指,对于两个整数p、q,
q%p=0
或存在整数k使得q = k*p,
记作p|q

整除关系有如下性质:

  • 𝑎∣𝑏 ⟺ −𝑎∣𝑏 ⟺ 𝑎∣−𝑏 ⟺ |𝑎|∣|𝑏|
  • 𝑎∣𝑏 ∧𝑏∣𝑐 ⟹ 𝑎∣𝑐
  • 𝑎∣𝑏 ∧𝑎∣𝑐 ⟺ ∀𝑥,𝑦∈𝐙, 𝑎∣(𝑥𝑏 +𝑦𝑐)
  • 𝑎∣𝑏 ∧𝑏∣𝑎 ⟹ 𝑏 = ±𝑎
  • 设 𝑚!=0 ,那么 𝑎∣𝑏 ⟺ 𝑚𝑎∣𝑚𝑏
  • 设 𝑏!=0 ,那么 𝑎∣𝑏 ⟹ |𝑎| ≤|𝑏|
  • 设 𝑎!=0 ,𝑏 =𝑞𝑎 +𝑐 ,那么 𝑎∣𝑏 ⟺ 𝑎∣𝑐

2.规定,若a|b, a是b的约数,b是a的倍数

3.带余除法:设 𝑎,𝑏为两个给定的整数,𝑎!=0. 设𝑑是一个给定的整数.那么,一定存在唯一的一对整数 𝑞 和 𝑟 ,满足 𝑏 = 𝑞𝑎 +𝑟, 𝑑 ≤ 𝑟 < |𝑎| +𝑑.

4.同余关系是指,对于三个整数p、q、r,
p-q%r=0
p%r = q%r
p-q|r,
记为p≡q(mod r)
称p与q对r同余

5.质数筛:找出从1到n的所有质数
a.埃氏筛:对每一个大于1的数,其k倍(k为整数)必为合数。
代码实现:

vector<int> prime;
vector<bool> isPrime(n+1, true);void Eratosthenes(int n){isPrime[0] = false, isPrime[1] = false;for(int i = 2; i <= n; i++){if(isPrime[i]) {prime.push_back(i);if ((long long)i * i > n) continue;for(int j = i*i; j <= n; j+=i){if(isPrime[j]) isPrime[j] = false;}}}
}

复杂度nlogn,对于每一个质数i,i * 2到i * (i-1)都已经在之前的质数循环中筛掉了(假设是k * i,k < i,若k为质数,在先前处理质数k时已经筛掉了k * i,若k为合数,则必定在一k的质因数k'时筛掉了k * i)

埃氏筛的优化:上述Eratosthenes函数中,外层循环的筛只需要筛到i*i<=n即可,不需要判断if ((long long)i * i > n) continue;,这是优化到平方根;还可以将2单独提出来,后续只筛奇数的i,循环步长改为i+=2即可,又能减少一半的工作量。经过这两次优化后,时间复杂度被压缩至n loglog sqrt(n)

关于大数据的埃氏筛内存优化,详见todo:分块筛法

b.线性筛(欧拉筛)
埃氏筛中,许多合数被重复标记,而线性筛通过优化使得时间复杂度进一步降低到了O(n),线性筛的具体做法是,通过判断当前筛的数是否能被已经筛出的质数整除,决定是否继续取出质数筛选,避免重复筛选,代码如下:

vector<int> prime;
vector<int> notPrime(n+1, false);void EulerSieve(int n){for(int i = 2; i <= n; ++i){if(!notPrime[i]) prime.push_back(i);for(int primeJ : prime){if(primeJ * i > n) break;notPrime[primeJ * i] = true;if(i % primeJ == 0) break;  /* 如果i能被primeJ整除,说明先前i已经被primeJ筛掉了,后续i的倍数一定也已经被primeJ筛掉,故break*/    }}
}

线性筛的其他应用见todo:线性筛应用

http://www.jsqmd.com/news/263868/

相关文章:

  • MySQL Buffer Pool深度解析:当缓存页不足时如何基于LRU算法进行淘汰 - 详解
  • 内存管理-MMU
  • 1.18假期记录
  • 区间dp
  • STM32-S57-烟雾浓度+温度+人体防盗报警+水泵+风扇+TFT彩屏+阈值+声光报警+(无线方式选择)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 综述《导航定位与授时》封面丨飞行器视觉导航新时代——从地形匹配到空间智能 - MKT
  • STM32-S184-车位感应+停车引导+闸道控制+车道防夹+计时计费+结算+OLED屏+声光报警+按键+(无线方式选择)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫
  • AI Agent在智能新闻事件检测中的应用
  • 【六杆】基于matlab六杆快速回归机制运动学和动力学分析【含Matlab源码 14990期】
  • 应用——基于 51 单片机的多功能嵌入式系统
  • 2026国产时序数据库:格局演变下金仓融合多模架构的差异化突围
  • 面试 Java 基础八股文十问十答第十四期
  • 深度测评8个一键生成论文工具,MBA论文写作必备!
  • 【机翼】基于matlab三维机翼几何进行耦合静态气弹性分析【含Matlab源码 14991期】
  • 医疗数据用KNN插补稳缺失值
  • 深度测评8个AI论文平台,继续教育学生轻松搞定毕业论文!
  • 【案例】某零售品牌AI驱动的库存与品牌营销联动系统:架构师的设计思路
  • 【飞机】基于matlab倾转旋翼飞机齿轮箱建模与仿真(含非线性阻尼和立方摩擦效应)【含Matlab源码 14988期】
  • web手势剑阵(开源)
  • LangGraph详解:构建智能代理工作流的新范式
  • 【机翼】三维机翼几何进行耦合静态气弹性分析【含Matlab源码 14991期】
  • 【流体】基于matlab上风及一阶、二阶中心差分方案二维稳态对流扩散方程分析【含Matlab源码 14989期】含报告
  • vue学习笔记四
  • 【流体】上风及一阶、二阶中心差分方案二维稳态对流扩散方程分析【含Matlab源码 14989期】含报告
  • 【LeetCode热题100】Java详解:从前序与中序遍历序列构造二叉树(含递归/迭代双解法与工程实践)
  • YOLO26 改进 - 注意力机制 | 空间增强注意力SEAM(Spatially Enhanced Attention Module)提升遮挡场景检测鲁棒性
  • 【信号识别】TFMix:时频域融合赋能特定辐射源识别,领域泛化性能再突破【附python代码】
  • Python+django的校园二手书籍交易平台的设计实现
  • 【克拉美罗下界】突破CRB局限!多源波达方向估计的全局紧界ZZB方法重磅来袭【附python代码】
  • 【六杆】六杆快速回归机制运动学和动力学分析【含Matlab源码 14990期】