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

素数筛选法

1.埃拉托斯特尼筛法

埃拉托斯特尼筛法的基本思想是:要得到自然数 n 以内的全部素数,必须把不大于根号 n 的所有素数的倍数剔除,剩下的就是素数。

std::vector<int> sieve_of_eratosthenes(int n) {std::vector<bool> is_prime(n + 1, true);is_prime[0] = is_prime[1] = false;for (int i = 2; i * i <= n; ++i) {if (is_prime[i]) {for (int j = i * i; j <= n; j += i) {is_prime[j] = false;}}}std::vector<int> primes;for (int i = 0; i <= n; ++i) {if (is_prime[i]) {primes.push_back(i);}}return primes;
}

2.欧拉筛(线性筛法)

线性筛法的核心思想是每个合数只被它的最小质因数筛去。这样可以保证每个数只被筛一次,从而达到线性时间复杂度 O (n)。

std::vector<int> linear_sieve(int n) {std::vector<int> primes;std::vector<bool> is_prime(n + 1, true);is_prime[0] = is_prime[1] = false;for (int i = 2; i <= n; ++i) {if (is_prime[i]) {primes.push_back(i);}for (int j = 0; j < primes.size() && i * primes[j] <= n; ++j) {is_prime[i * primes[j]] = false;if (i % primes[j] == 0) {break;}}}return primes;
}

对于if (i % primes[j] == 0)break;的解释

  • i % primes[j] == 0时,意味着i可以写成i = k * primes[j]k为整数)的形式。
  • 此时如果继续让j增加,也就是用更大的素数primes[j + 1]去筛i * primes[j + 1],会发现i * primes[j + 1]=(k * primes[j])* primes[j + 1],而primes[j]小于primes[j + 1],这就说明i * primes[j + 1]这个数的最小质因数应该是primes[j],而不是primes[j + 1]

http://www.mrgr.cn/news/69711.html

相关文章:

  • 将大型语言模型(如GPT-4)微调用于文本续写任务
  • 【Chapter 3】Machine Learning Classification Case_Prediction of diabetes-XGBoost
  • 自动化爬虫DrissionPage
  • The 3rd Universal CupStage 15: Chengdu, November 2-3, 2024(2024ICPC 成都)
  • Java开发人员从零学习ArkTs笔记(二)-函数与类
  • 游戏引擎学习第五天
  • 说说HDD老将的那些事儿
  • 这是我见过讲解大模型最详细的一本书!学习大模型的建议都去读!
  • 拓扑学与DNA双螺旋结构的奇妙连接:从算法到分子模拟
  • 大模型入门自学资源汇总,很难找到比这还全的大模型学习资源总结了!
  • <项目代码>YOLOv8 草莓成熟识别<目标检测>
  • 【存储服务】一文带你了解ETCD
  • 政治经济学笔记
  • 从关键新闻和最新技术看AI行业发展(第三十四期2024.10.14-10.27) |【WeThinkIn老实人报】
  • 计算机网络——1.1计算机网络概述
  • PG COPY 与 INSERT方式导入数据时, 表默认值表现的不同
  • 【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
  • Linux系统常用命令
  • 【IC每日一题:IC验证面试--UVM验证-2】
  • 多线程---线程池
  • 保护Kubernetes免受威胁:容器安全的有效实践
  • 锐捷技能大赛—L2TP隧道与L2TP Over IPSec嵌套,并在隧道内运行OSPF
  • 【力扣热题100】[Java版] 刷题笔记-169. 多数元素
  • 丹摩征文活动 |【网络原理】关于HTTP的进化之HTTPS的加密原理的那些事
  • SQL50题
  • vue3入门和实战-vue3项目创建