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

筛质数(暴力法、埃氏筛、欧拉筛)

筛质数(暴力法、埃氏筛、欧拉筛)

暴力法

思路分析:

直接双for循环来求解质数
如果不设置标记只是简单地执行了break会导致内部循环(由j控制)而不是立即打印i或者跳过它。如果打印语句写到内部循环中,也会导致每个
非素数也被打印出来多次(在找到其因子之前)。

code:

#include <iostream>
using namespace std;
int n;
int main() {cin >> n;for (int i = 2; i <= n; i++) { // 从2开始,因为1不是素数bool isprime = true; // 假设i是素数for (int j = 2; j * j <= i; j++) { // 只需要检查到sqrt(i),因为如果i有一个大于sqrt(i)的因子,那么它必然还有一个小于或等于sqrt(i)的因子if (i % j == 0) {isprime = false; // 如果找到一个因子,则i不是素数break;}}if (isprime) { // 如果i是素数,则打印它cout << i << " ";}}return 0;
}

埃氏筛

思路分析:

如果一个数是素数,那么它的倍数就不是素数

code:

#include <iostream>
using namespace std;
int main(){int p[100010]={1,1};//f[i]=1代表不是素数int n;cin>>n;for(int i=2;i<=n;i++){if(p[i]==1) continue;for(int j=2;i*j<=n;j++){p[i*j]=1;}}for(int i=1;i<=n;i++){if(p[i]==0){cout<<i<<' ';}}
}

欧拉筛

思路分析:

基本思想:确保每个数只被其除1以外的最小质因数标记。
实现:<需要一个数组把它存储起来,
逆向思考:从最大因数开始找到最小的质因数,
在处理一个数时,需要遍历所有已经找到的质数,并当该质数是当前数的因数时退出循环,这是因为对于更大的数,当前数已不再是其最大的因数,无需继续处理。>

code:

#include <iostream>
using namespace std;
int main(){int d=0;int p[10010]={0};int f[10010]={1,1};int n;cin>>n;for(int i=2;i<=n;i++){if(f[i]==0){//如果没有被标记过,那么i是质数p[d++]=i;//先运行后加}for(int j=0;j<d;j++){if(p[j]*i<=n){//标记以i为最大因数的数不是素数f[p[j]*i]=1;}else{break;}if(i%p[j]==0){//如果p[j]是i的因数,那么后面的数都不是以i为最大因数的break;}}}for(int i=0;i<d;i++){cout<<p[i]<<' ';}
}

如果 i 能够被 p[j] 整除(即 i % p[j] == 0),那么说明 p[j] 是 i 的一个因数。由于我们已经用 p[j] 标记了所有小于或等于n的 p[j] 的倍数,所以没有必要再用更大的质数去标记 i 的倍数。因此,可以跳出内层循环。

http://www.lryc.cn/news/380015.html

相关文章:

  • 使用USI作为主SPI接口
  • AI播客下载:Eye on AI(AI深度洞察)
  • Flink 窗口触发器
  • Java面试题:解释线程间如何通过wait、notify和notifyAll方法进行通信
  • 【机器学习 复习】第9章 降维算法——PCA降维
  • Ubuntu系统docker gpu环境搭建
  • 网络安全-如何设计一个安全的API(安全角度)
  • 微积分-导数1(导数与变化率)
  • 最新PHP仿猪八戒任务威客网整站源码/在线接任务网站源码
  • Windows安装配置jdk和maven
  • 电子SOP实施(MQTT协议)
  • 【Unity导航系统】Navigation组件的概念及其使用示例
  • vue-cli 根据文字生成pdf格式文件 jsPDF
  • 【嵌入式DIY实例】-Nokia 5110显示DS3231 RTC数据
  • 【十三】图解mybatis缓存模块之装饰器模式
  • 字节大神强推千页PDF学习笔记,弱化学历问题,已拿意向书字节提前批移动端!
  • Python爬虫-贝壳二手房“改进版”
  • zookeeper学习、配置文件参数详解
  • SVG 模糊效果
  • Electron+vite+vuetify项目搭建
  • 洛谷:P1085 [NOIP2004 普及组] 不高兴的津津
  • Webpack4从入门到精通以及和webpack5对比_webpack现在用的是哪个版本
  • 巴鲁夫MacroBuilder2.0.0.0软件巴鲁夫和使用手侧
  • 分享:Javascript开源桌面环境-Puter
  • 【idea-jdk1.8】使用Spring Initializr 创建 Spring Boot项目没有JDK8
  • 647. 回文子串(leetcode)
  • 【车载开发系列】汽车嵌入式开发常用工具介绍
  • python脚本获取本机IP的方式
  • 查看LabVIEW及各个模块和驱动的版本号
  • LLM主流架构和模型