..质数..

先弄清楚我们在上小学时 学的概念。

1、什么是质因数?
     -质因数是指能够整除给定正整数的质数。每个正整数都可以被表示为几个质数的乘积,这些质数就是该数的质因数。质因数分解是将一个正整数分解成若干个质数相乘的过程。例如,数字 12 的质因数分解是 2 × 2 × 3,因此 2 和 3 是 12 的质因数。

2、什么是质因数的底数与指数?
      -底数(Base):指的是质因数分解中的质数。这些质数是构成原数的不可再分的基本元素。例如,在质因数分解12的过程中,底数是2和3,因为12可以分解为2和3的乘积。
      -指数(Exponent):指的是在质因数分解中,每个质因数出现的次数。指数表示该质因数在原数中的“数量”。例如,数字12可以分解为 2x2x3,这里2的指数是2,表示质因数2出现了两次;3的指数是1,表示质因数3出现了一次。

3、什么是合数?
      -合数是一个大于1的自然数,它不是质数,也就是说,它除了1和它本身以外,至少还有一个正因数。换句话说,合数可以被分解为两个或更多较小的正整数的乘积。合数的判定方法通常是通过检查一个数是否有除了1和它本身以外的因数。如果一个数可以被除了1和它本身以外的任何数整除,那么这个数就是合数。

4、什么是因数?
      -因数是指能够整除给定正整数的数。换句话说,如果一个数b能够被另一个数a整除,那么b就是a的因数。因数通常是指除了1和它本身以外的因数,因为1是所有正整数的因数。

质数

质数的判断

在判定一个数是否为质数时常用试除法

题目:866. 试除法判定质数 - AcWing题库

代码:

复杂度是严格的O(sqrt(n))

#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;const int N=105;
int n,a[N];bool check_prime(int x)
{//1不是质数if(x<2) return false;//对于一个非质数的数而言,一定含有两个因数,所以只要枚举较小的那一个即可for(int i=2;i<=x/i;i++){if(x%i==0) return false;}return true;
}int main()
{cin >> n;for(int i=0;i<n;i++){cin >> a[i];if(check_prime(a[i])) cout << "Yes" << endl;else cout << "No" << endl;}return 0;}

这里的 判定条件写为i <= x/i 而不写成i <= sqrt(x) 的原因是因为后者效率低,不写成i*i <= x 原因是因为防止i*i时溢出

分解质因数


分解质因数——试除法(O(sqrt(n))——>O(log2(n))~O(sqrt(n)))
从小到大枚举所有数

for(int i=2;i<=n;i++)if(n%i==0){int s=0;while(n%i==0){n/=i;s++;}cout << i << s << endl;}


在这里while里面的i实际上是所有质因数。
原因就是在枚举所有数的过程中,当枚举到i的时候,2~i-1之间的i的所有因数都被除干净了
所以这里所枚举的就是质因数。例如n=8的时,i=2就会把n置于0,枚举到i=4的时候已经n已经=1了。

由于n当中最多只包含一个大于sqrt(n)的质因子,即它本身
所以代码为:

for(int i=2 ;i <= n/i;i ++ )if(n%i==0){int s=0;while(n%i==0){n/=i;s++;}cout << i << s << endl;}if(n>1) cout << n << 1 << endl;
题目:867. 分解质因数 - AcWing题库

代码:

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;int n,a[105];void print_prime(int x)
{for(int i=2;i<=x/i;i++){if(x%i==0){int s=0;//求底数的质数while(x%i==0){//这里如果质因数的质数不唯一,那么就逐个舍弃x/=i;s++;}cout << i << ' ' << s << endl;}}//经过上述质因数的分解后,x>1的话,那么x就是一个质数。比如17、19...经过上述循环仍为它本身if(x>1) cout << x  << ' ' << 1 << endl;//注意题目要求的格式cout << endl;return;
}int main()
{cin >> n;for(int i=0;i<n;i++){cin >> a[i];print_prime(a[i]);}return 0;
}

筛质数 

两种算法,

1、朴素筛法:对2~n-1的数的倍数做标记,那么剩余没有被标记的即为质数。因为剩余的也就没有因子。

贴个图,一目了然

 板子:
void get_prime(int n)
{for(int i=2;i<=n;i++){if(!st[i]){res++;}for(int j=i+i;j<=n;j+=i) st[j]=true;}
}

对朴素筛选的优化 ——埃氏筛 
 在筛选过程中只用质数去筛,因为一个数最小的因数就是质因数,证明:一个数的除了1之外最小的因数一定是质数吗?为什么?_百度知道 (baidu.com)

板子:
void get_prime(int n)
{for(int i=2;i<=n;i++){//如果被筛选后仍为false,则为质数if(!st[i]){res++;for(int j=2*i;j<=n;j+=i) st[j]=true;}}
}

缺点:无论怎样优化都会有数被多次标记,进而增加复杂度

2、线性筛

用每个合数只会被最小的质因数筛掉。因为每个数的最小质因数只有一个,所以每一个数只会被筛一次,所以总体为线性。

板子:
void get_prime(int n)
{for(int i=2;i<=n;i++){if(!st[i]) a[res++]=i;for(int j=0;a[j] <= n/i;j++){st[a[j]*i]=true;if(i%a[j]==0) break;}}
}
题目:868. 筛质数 - AcWing题库

代码:
#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;int n,res,a[1000010];
//开个bool数组来记录当前数是否为质数
bool st[1000010];void get_prime(int n)
{for(int i=2;i<=n;i++){//如果被筛选后仍为false,则为质数,我们就将其记录下来。if(!st[i]) a[res++]=i;//每一个数只会被它的最小质因子筛去//枚举每一个质数for(int j=0;a[j] <= n/i;j++)/*这里a[j]退出循环的条件我们展开来看:a[j]*i<=n如果a[j]再增加,那么a[j]*i的值就会>n,筛n之外的非质数对于题干要求来说没什么意义*/{/*比如这里的i=27,那么在第一次会把st[2*27]筛出去,第二次把st[3*27]筛出去第三次把st[5*27]筛出去,但是第三次的筛选是没有任何意义的(即造成重复标记)因为5*27=45*3;所以5*27应该由它的最小质数3所筛去*/st[a[j]*i]=true;//如果i%a[j]==0那么a[j]一定是i的最小质因子,如果不break掉,那么一定会造成后续的数重复被标记if(i%a[j]==0) break;//a[j]一定是i的最小质因子,因为a[i]是从小到大进行枚举}}
}int main()
{cin >> n;get_prime(n);cout << res << endl;return 0;
}

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

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

相关文章

Nginx服务优化

1 隐藏版本号* 方法一 &#xff1a;在http模块中添加行 #隐藏版本号 server_tokens off;方法二 &#xff1a;修改版本信息 进入源码安装包 cd /安装包根目录/src/core vim nginx.h 解注释以下行并修改 define NGINX_VERSION "Dont you guess!" difine NGINX_VER…

C:数据结构---算法

1.1排序算法 稳定排序 不稳定排序 ①冒泡排序&#xff08;稳定&#xff09; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对 ②选择排序 在未排序序列中找到最小&#xff08;大…

Nature Communications|柔性高密度、高灵敏应变传感器阵列(柔性应变传感/界面调控/电子皮肤/柔性电子)

复旦大学武利民( Limin Wu)和李卓( Zhuo Li)团队,在《Nature Communications》上发布了一篇题为“High-density, highly sensitive sensor array of spiky carbon nanospheres for strain field mapping”的论文。论文内容如下: 一、 摘要 在工程应用中,准确地映射应变…

星环科技推出语料开发工具TCS,重塑语料管理与应用新纪元

5月30-31日&#xff0c;2024向星力未来数据技术峰会期间&#xff0c;星环科技推出一款创新的语料开发工具——星环语料开发工具TCS&#xff08;Transwarp Corpus Studio&#xff09;&#xff0c;旨在通过全面的语料生命周期管理&#xff0c;极大提升语料开发效率&#xff0c;助…

批量提取PDF中表格内容

1 背景 从PDF文件获取表格中的数据&#xff0c;也是日常办公容易涉及到的一项工作。比如我们想获取某公司年报里面的表格数据&#xff0c;PDF动辄上百页的数据。 2 传统方法 一个一个从PDF表格中复制&#xff0c;然后粘贴到Excel表格中&#xff0c;效率太低了。 3 办公自动…

云计算【第一阶段(29)】远程访问及控制

一、ssh远程管理 1.1、ssh (secureshell)协议 是一种安全通道协议对通信数据进行了加密处理&#xff0c;用于远程管理功能SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;建立在应用层和传输层基础上的安全协议。SSH客…

深度学习中的正则化技术 - 噪声鲁棒性篇

序言 在深度学习的蓬勃发展中&#xff0c;模型的性能与泛化能力成为了研究者们关注的焦点。然而&#xff0c;实际应用中的数据往往伴随着各种噪声&#xff0c;这些噪声不仅来源于数据采集过程中的硬件限制&#xff0c;还可能由环境干扰、传输错误等因素引入。噪声的存在严重影…

synchronized关键字详解(全面分析)

目录 synchronized关键字详解1、synchronized关键字简介2、synchronized作用和使用场景作用使用场景①、用在代码块上(类级别同步)②、用在代码块上(对象级别同步)③、用在普通方法上(对象级别同步)④、用在静态方法上(类级别同步)总结&#xff1a; 3、synchronized底层原理&am…

使用Gunicorn提高Web应用的多核并发处理能力

使用Gunicorn提高Web应用的多核并发处理能力 Web应用程序需要处理大量的并发请求&#xff0c;尤其在多用户访问的场景下&#xff0c;如何有效地利用服务器的多核处理能力是提升性能的关键之一。Gunicorn&#xff08;Green Unicorn&#xff09;作为一个Python WSGI HTTP服务器&…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表&#xff08;linear list&#xff09;是n…

大数据平台之HiveServer2

HiveServer2 是 Apache Hive 的一个重要组件&#xff0c;用于为客户端提供统一的接口来访问 Hive 数据仓库。它提供了一个 JDBC、ODBC 和 Thrift 接口&#xff0c;支持多种客户端连接方式&#xff0c;并增加了多用户隔离和增强的安全性。 HiveServer2 详细介绍 1. 背景与发展…

多线程链表操作设计

在多线程环境中操作共享的数据结构(例如链表),通常需要使用互斥锁(mutex)或其他同步机制来确保数据的一致性和防止竞态条件。然而,使用互斥锁会带来锁的开销和潜在的死锁问题。为了设计一个可重入并且高效的链表操作,可以考虑以下几种无锁或细粒度锁的设计方案。 1. 无锁…

第五十四章 生成的 WSDL 的详细信息 - portType

文章目录 第五十四章 生成的 WSDL 的详细信息 - portType<portType><message> 第五十四章 生成的 WSDL 的详细信息 - portType 在 <binding> 部分之前&#xff0c;WSDL 包含 <portType> 元素&#xff0c;每个元素通过为 <binding> 元素指定单个地…

Go 垃圾回收(GC)

之前自以为对Go语言的GC了如指掌&#xff0c;结果昨天被面试官疯狂拷打。于是有了这篇博客。 Go语言的GC主要有三个版本&#xff1a; v1.3 标记清除法v1.5 三色标记法 写屏障v1.8 混合写屏障 v1.3标记清除法 Go1.3的标记清除法是Go语言早期版本的垃圾收集策略。这种方法在…

java并发编程之美-第1章 并发编程线程基础-线程通知与等待(wait/notify,notifyAll)

文章目录 前言1. wait()函数 前言 Object类是所有类的父类&#xff0c;鉴于继承机制&#xff0c;Java把所有类都需要的方法放到了 Obiect类里面&#xff0c;其中就包含通知&#xff08;notify&#xff0c;notifyAll&#xff09;与等待(wait)系列函数。 1. wait()函数 当一个…

SpringBoot使用Redisson操作Redis及使用场景实战

前言 在SpringBoot使用RedisTemplate、StringRedisTemplate操作Redis中&#xff0c;我们介绍了RedisTemplate以及如何SpringBoot如何通过RedisTemplate、StringRedisTemplate操作Redis。 RedisTemplate的好处就是基于SpringBoot自动装配的原理&#xff0c;使得整合redis时比较…

【力扣C语言】每日一题—第387题,字符串中第一个唯一字符

题目&#xff1a; 给出一串字符串&#xff0c;找出其中第一个不重复的字符&#xff0c;返回它的索引 思路&#xff1a; 暴力求解&#xff1a; 1、算字符串长度 2、while循环作为外循环&#xff0c;for循环作为内循环&#xff0c;依次遍历&#xff0c;如果有相同的跳过&…

防火墙安全策略练习

目录 实验拓扑 实验要求 实验思路 实验步骤 1.配置交换机&#xff0c;划分接口的vlan&#xff0c;配置ISP 2.配置防火墙 3.接下来在WEB界面进行所有安全策略操作 配置接口 创建安全区域&#xff1a; 创建地址&#xff1a; 时间段&#xff1a; 安全策略部分&#xff…

地理信息科学在灾害管理中的应用:GIS构建防灾减灾的智慧防线

在全球气候变化与人类活动加剧的背景下&#xff0c;自然灾害频发&#xff0c;给社会经济发展带来了严峻挑战。本文将深入分析GIS在灾害预测、评估和响应中的核心作用&#xff0c;展示其如何为构建更加安全、韧性的社会提供智慧解决方案。 灾害预测&#xff1a;GIS的“先知”之…

JavaScript青少年简明教程:为何学习JavaScript及JavaScript简介

JavaScript青少年简明教程&#xff1a;为何学习JavaScript及JavaScript简介 JavaScript最初是为web浏览器&#xff08;前端开发&#xff09;设计的。它可以在所有现代浏览器中运行&#xff0c;包括Chrome, Firefox, Safari, Edge等。 这意味着JavaScript代码可以在任何能运行…