C/C++快速求素数【细节满满】

个人主页:仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客

专题分栏:数论_仍有未知等待探索的博客-CSDN博客

目录

 

一、暴力求解

1、求1-n之间的素数(O(n^2))

1.思路

2.代码 

 2、判断某个数x是否为素数

1.思路

2.代码

二、 Eratosthenes筛法(埃氏筛)

1、求1-n之间的素数(O(n^logn))

1.思路

2.代码

三、 Euler 筛法(欧拉筛法)

1、求1-n之间的素数(O(n))

1.思路

2.代码


 

一、暴力求解

在以前的学习的时候,我们写过如何求1-n以内的素数,也写过判断某个数是否是素数。我们学过素数(也称质数)只能被1和它本身的整除。

根据这个,我们可以开始写了。

1、求1-n之间的素数(O(n^2))

1.思路

首先,我们要有1-n之间的数,然后一个一个的判断其是不是素数,然后进行打印。

根据下面的代码或者这个思路,我们可以知道这个代码的时间复杂度为O(n^2)。在一些比赛中,可能会被卡时间。

因为我们知道1不是素数,所以提供的数从2开始。

2.代码 

#define _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>
#include<math.h>
void _prime(int n);
int main()
{int n;scanf("%d", &n);_prime(n);return 0;
}
void _prime(int n)
{//因为我们知道1不是素数,所以直接从2开始进行判断for (int i = 2; i <= n; i++){//判断是否是素数int flag = 0;for (int j = 2; j <= sqrt(i); j++){if (i % j == 0){flag = 1;break;}}if (flag == 0){printf("%d ", i);}}
}

 2、判断某个数x是否为素数

1.思路

循环2-sqrt(x),然后对x进行取余,如果取余结果为0,则不是素数,反之,是素数。

2.代码

#include<stdio.h>
#include<math.h>
int isprime(int x);
int main()
{int x;scanf("%d", &x);if (isprime(x) == 1){printf("YES\n");}else{printf("NO\n");}return 0;
}
int isprime(int x)
{if (x == 1)return 0;for (int i = 2; i <= sqrt(x); i++){if (x % i == 0)return 0;}return 1;
}

二、 Eratosthenes筛法(埃氏筛)

1、求1-n之间的素数(O(n^logn))

1.思路

这个筛法的思路是把所有质数的整数倍全部筛掉。

同样地,我们首先是提供1-n之间的数。然后判断数是不是素数,如果是素数,将素数的整数倍都标记成不是素数。如果不是素数,则不做处理。这样的话,会减少其时间复杂度,但仍然会重复定义。

其时间复杂度是O(n*logn),虽然减少了一点儿,可还是有一些长。

判断是不是素数,不要写一个判断函数,从2-sqrt(n)进行循环取余判断。

我们先设立一个数组,用来标记素数。然后我们将数组中全部默认标记为是素数。

然后我们从数字2(我们知道数字2是素数)开始进行对其整数倍进行标记,同理3也是如此。这样就可以将素数进行标记出来。

因为我们知道1不是素数,所以提供的数从2开始。

2.代码

#include<stdio.h>
#define MAX 100
int prime[MAX];//记录素数,默认2-n之间全是素数,然后再进行筛选
int main()
{int n;scanf("%d", &n);for (int i = 2; i <= n; i++){//因为我们知道1不是素数,所以直接从2开始进行判断if (prime[i] == 0){for (int j = 2 * i; j <= n;j+=i){//0代表素数,1代表非素数prime[j] = 1;}}}for (int i = 2; i <= n; i++){if (prime[i] == 0)printf("%d ", i);}return 0;
}

三、 Euler 法(欧拉筛法)

1、求1-n之间的素数(O(n))

1.思路

欧拉筛是唯一筛掉一个数的筛法,不存在重复计算,所以时间复杂度是O(n)。

核心代码:i % prime[j] == 0(i是素数的倍数)。

2.代码

#include<stdio.h>
#define MAX 100
int prime[MAX];//用来记录素数,0为素数
int record[MAX];
int cnt;//记录素数的大小
void Euler(int n);
int main()
{int n;scanf("%d", &n);Euler(n);for (int j = 0; j < cnt; j++){printf("%d ", prime[j]);}return 0;
}
void Euler(int n)
{for (int i = 2; i <= n; i++){if (!record[i])//如果当前是素数,记录下来{prime[cnt++] = i;}for (int j = 0; j < cnt && i * prime[j] <= n; j++){record[i * prime[j]] = 1;if (i % prime[j] == 0)break;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0基础学习PyFlink——使用datagen生成流式数据

大纲 可控参数字段级规则生成方式数值控制时间戳控制 表级规则生成速度生成总量 结构生成环境定义行结构定义表信息 案例随机Int型顺序Int型随机型Int数组带时间戳的多列数据 完整代码参考资料 在研究Flink的水位线&#xff08;WaterMark&#xff09;技术之前&#xff0c;我们可…

数据结构——顺序表(SeqList)

目录 1. 顺序表介绍 2. 顺序表工程 2.1 顺序表定义 2.1.1 静态顺序表 2.1.2 动态顺序表 2.2顺序表接口 2.2.1 顺序表初始化 2.2.2 顺序表打印 2.2.3 顺序表销毁 2.2.4 顺序表数据插入 2.2.4.1 容量检查 2.2.4.2 顺序表尾插 2.2.4.3 顺序表头插 2.2.4.4 顺序表随机…

git关联远程仓库自己分支自用

初始化仓库 cassielDESKTOP-KPKFOEU MINGW64 /d/code/api_test_202310232022 (tong) $ git init Reinitialized existing Git repository in D:/code/api_test_202310232022/.git/关联远程仓库并创建本地分支 cassielDESKTOP-KPKFOEU MINGW64 /d/code/api_test_202310232022 …

jQuery知识点(小白总结)

1. 选择器&#xff1a;jQuery提供了多种选择器用于选择指定的元素&#xff0c;可以根据元素的ID、class、标签名、属性来选择元素。 2. 事件处理&#xff1a;jQuery拥有众多的事件处理函数&#xff0c;可以方便的绑定、解除事件&#xff0c;如click、hover、keyup等。 3. DOM…

人工智能与卫星:颠覆性技术融合开启太空新时代

人工智能与卫星&#xff1a;颠覆性技术融合开启太空新时代 摘要&#xff1a;本文将探讨人工智能与卫星技术的融合&#xff0c;并介绍其应用、发展和挑战。通过深入了解这一领域的前沿动态&#xff0c;我们将展望一个由智能卫星驱动的未来太空时代。 一、引言 近年来&#xf…

lazada商品评论API接口(评论内容|日期|买家昵称|追评内容|评论图片|评论视频..)

Lazada商品评论API接口是Lazada开放平台提供的一种API接口&#xff0c;可以帮助开发者获取Lazada平台上的商品评论数据。 通过该接口&#xff0c;开发者可以获取到用户对商品的评论信息&#xff0c;包括评论内容、评价等级、评论时间等&#xff0c;从而了解用户对商品的反馈和…

微信小程序overflow-x超出部分样式不渲染

把display:flex改成display:inline-flex&#xff0c; 将对象作为内联块级弹性伸缩盒显示&#xff0c; 类似与是子元素将父元素撑开&#xff0c;样式就显示出来了

智信SMS客户端操作手册

登录系统 登录前需查看用户协议输入账号和密码&#xff0c;点击登录即可 首页介绍 登录成功之后&#xff0c;进入操作页面。 操作页面包括&#xff1a;设置、导入手机号、发送短信三大块功能。 如图&#xff1a; 导入手机号 点击首页中的导入按钮&#xff0c;即可导入手机…

微服务框架SpringcloudAlibaba+Nacos集成RabbitMQ

目前公司使用jeepluscloud版本&#xff0c;这个版本没有集成消息队列&#xff0c;这里记录一下&#xff0c;集成的过程&#xff1b;这个框架跟ruoyi的那个微服务版本结构一模一样&#xff0c;所以也可以快速上手。 1.项目结构图&#xff1a; 配置类的东西做成一个公共的模块 …

Spring- SpringBean生命周期源码解析

附带资料JFR介绍&#xff1a;深度探索JFR - JFR详细介绍与生产问题定位落地 - 1. JFR说明与启动配置 - 知乎 Spring最重要的功能就是帮助程序员创建对象&#xff08;也就是IOC&#xff09;&#xff0c;而启动Spring就是为创建Bean对象做准备&#xff0c;所以我们先明白Spring到…

点云从入门到精通技术详解100篇-基于三维点云的路况语义分割

目录 前言 国内外研究现状 基于传统方法的点云语义分割 基于深度学习方法的点云语义分割

医疗数据可视化大屏:重构医疗决策的未来

医疗行业一直是信息密集型领域之一&#xff0c;它的复杂性不仅在于患者病历和医疗数据的海量积累&#xff0c;还包括了病情诊断、医疗资源分配、病患治疗等多层次的挑战。随着信息技术的不断发展&#xff0c;医疗数据可视化大屏成为了一种创新性的工具&#xff0c;它为医疗管理…

TypeScript深度剖析:TypeScript 中枚举类型应用场景?

文章目录 一、是什么二、使用数字枚举字符串枚举异构枚举本质 三、应用场景 一、是什么 枚举是一个被命名的整型常数的集合&#xff0c;用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型 通俗来说&#xff0c;枚举就是一个对象的所有可能取值的集…

阿里云推出AI编程工具“通义灵码“;生成式 AI 入门教程 2

&#x1f989; AI新闻 &#x1f680; 阿里云推出AI编程工具"通义灵码"&#xff0c;支持多种语言及实时续写功能 摘要&#xff1a;阿里云推出了一款名为"通义灵码"的AI编程工具&#xff0c;支持多种主流编程语言&#xff0c;包括Java、Python、Go等。该工…

java spring boot 注解、接口和问题解决方法(持续更新)

注解 RestController 是SpringMVC框架中的一个注解&#xff0c;它结合了Controller和ResponseBody两个注解的功能&#xff0c;用于标记一个类或者方法&#xff0c;表示该类或方法用于处理HTTP请求&#xff0c;并将响应的结果直接返回给客户端&#xff0c;而不需要进行视图渲染…

IDEA 设置代码注释模板

功能简介&#xff1a; 每次看别人代码时&#xff0c;面对毫无注释的类&#xff0c;除了头大还是头大&#xff0c; 以下提供了一种代码类注释模板 新建java类的时候&#xff0c;自动增加类注释&#xff0c;养成代码开发好习惯 效果展示&#xff1a; 代码模板&#xff1a; #if (…

css——半圆实心

案例 代码 <view class"circleBox"></view>.circleBox {width: 50px;height: 100px;background: red;border-radius: 100px 0 0 100px; }

ubuntu20.04 conda pack 打包虚拟环境,直接将其用到其他终端

在本机ubuntu20.04下配置的虚拟环境&#xff0c;想到将其整个放到新建的docker(ubuntu20.04)下使用&#xff0c;操作步骤如下&#xff1a; # 一、在ubuntu1下打包虚拟环境 # 安装conda-pack pip install conda-pack# 进入需要打包的虚拟环境,这里将目标虚拟环境名称为goal_env…

添加环境变量

echo export PYENV_ROOT"$HOME/.pyenv" >> ~/.bash_profile echo export PATH"$PYENV_ROOT/bin:$PATH" >> ~/.bash_profilepipenv --python 3.6 #指定使用Python3.6的虚拟环境 pipenv --two #使用系统的Python2在创建虚拟环境 pipenv --three …

单点登录。

Java单点登录&#xff08;SSO&#xff09;是一种在多个应用程序和系统之间共享用户身份验证信息的技术。它允许用户只需一次登录即可访问多个应用程序和系统&#xff0c;而不必每次都输入用户名和密码。Java SSO实现的基本思路是&#xff0c;当用户访问第一个应用程序时&#x…