..质数..

news2024/9/17 9:27:33

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

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

2、什么是质因数的底数与指数?
      -底数(Base):指的是质因数分解中的质数。这些质数是构成原数的不可再分的基本元素。例如,在质因数分解12的过程中,底数是2和3,因为12可以分解为2和3的乘积。
      -指数(Exponent):指的是在质因数分解中,每个质因数出现的次数。指数表示该质因数在原数中的“数量”。例如,数字12可以分解为 22×3122×31,这里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;
    }


在这里枚举的是所有因数,而不是枚举的所有质因数。
原因就是在枚举所有数的过程中,当枚举到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])
        {
            prime[res++]=n;
        }
        
        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.coloradmin.cn/o/1919071.html

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

相关文章

[激光原理与应用-109]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 12 - 焊接工艺之影响焊接效果的因素

目录 一、影响激光焊接效果的因素 1.1、光束特征 1.2、焊接特征 1.3、保护气体 二、材料对焊接的影响 2.1 材料特征 2.2 不同材料对激光的吸收率 &#xff08;一&#xff09;、不同金属材料对不同激光的吸收率 1. 金属材料对激光的普遍反应 2. 不同波长激光的吸收率差…

ant design pro多页签功能

效果&#xff1a; 原理&#xff1a; 1、所有需要页签页面&#xff0c;都需要一个共同父组件 2、如何缓存&#xff0c;用的是ant的Tabs组件&#xff0c;在共同父组件中&#xff0c;实际是展示的Tabs组件 3、右键&#xff0c;用的是ant的Dropdown组件&#xff0c;当点击时&…

SpringBoot新手快速入门系列教程十:基于docker容器,部署一个简单的项目

前述&#xff1a; 本篇教程将略过很多docker下载环境配置的基础步骤&#xff0c;如果您对docker不太熟悉请参考我的上一个教程&#xff1a;SpringBoot新手快速入门系列教程九&#xff1a;基于docker容器&#xff0c;部署一个简单的项目 使用 Docker Compose 支持部署 Docker 项…

MySQL某个字段按指定值排序,其他值按创建时间排序

项目场景&#xff1a; MySQL某个字段按指定值排序&#xff0c;其他值按创建时间排序&#xff0c;我们需要用到FIELD() 函数&#xff0c;它是一种对查询结果排序的方法&#xff0c;可以根据指定的字段值顺序进行排序。 order by FIELD() 函数的语法如下&#xff1a; ORDER BY …

[GHCTF 2024 新生赛]ezzz_unserialize

源码&#xff1a; <?php /*** Author: hey* message: Patience is the key in life,I think youll be able to find vulnerabilities in code audits.* Have fun and Good luck!!!*/ error_reporting(0); class Sakura{public $apple;public $strawberry;public function …

LiteOS增加执行自定义源码

开发过程注意事项&#xff1a; 源码工程路径不能太长 源码工程路径不能有中文 一定要关闭360等杀毒软件&#xff0c;否则编译的打包阶段会出错 增加自定义源码的步骤: 1.创建源码目录 2. 创建源文件 新建myhello目录后&#xff0c;再此目录下再新建源文件myhello_demo.c 3. 编…

GitHub Codespace从入门到放弃

洞悉技术的本质&#xff0c;享受科技的乐趣 背景 我在使用腾讯云主机打开使用github使用免费云空间编译代码。 遇到问题 在打开过程中 提升如下错误 你遇到的问题 别人也可能遇到 https://github.com/orgs/community/discussions/109419 我做了什么 阅读官方文档 https://docs.…

集群管理脚本

虚拟机集群管理脚本 文章目录 虚拟机集群管理脚本一、远程调用脚本(remote_call.sh)二、远程复制目录脚本(remote_copy.sh) 一、远程调用脚本(remote_call.sh) 如果有传命令参数&#xff0c;则执行该命令&#xff1b;如果没有传命令参数&#xff0c;则不执行。 #!/bin/bashcm…

用python识别二维码(python实例二十三)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.识别二维码 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&…

获取时间的函数

#include <func.h>int main(){time_t mainNow;time(&mainNow);printf("main time %s\n",ctime(&mainNow));return 0;} 结果如下&#xff1a; #include <stdio.h> #include <time.h> int main() {time_t mainNow;struct tm *tm_info;ch…

Windows环境+C#实现显示接口测试

代码如下&#xff1a; using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …

ThreadLocal与ThreadLocalMap

参考&#xff1a;理清ThreadLocal、ThreadLocalMap、Thread之间的关系 - 翎野君 - 博客园 (cnblogs.com) ThreadLocalMap 是 ThreadLocal 类中的一个静态内部类&#xff0c;但它存在于每个线程的 Thread 对象内部&#xff0c;而不是 ThreadLocal 实例本身。 ThreadLocal 类&am…

怎么压缩视频?推荐7款必备视频压缩软件免费版(强烈建议收藏)

如今&#xff0c;视频内容日益丰富&#xff0c;并占据了许多人的日常娱乐和工作生活。然而&#xff0c;随着高清和超高清视频的普及&#xff0c;视频文件的体积也越来越大&#xff0c;给存储和传输带来了挑战。因此&#xff0c;学会如何压缩视频文件成为了许多人的需求之一。本…

Spring Web MVC入门(1)(建立连接)

一.什么是Spring Web MVC? Spring Web MVC是基于ServletAPI构建的原始Web框架,从一开始就包含在Spring框架中.它的正式名称"Spring Web MVC"来自其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". 二.MVC的定义 MVC是Model View Controller的缩…

[终端安全]-7 后量子密码算法

本文参考资料来源&#xff1a;NSA Releases Future Quantum-Resistant (QR) Algorithm Requirements for National Security Systems > National Security Agency/Central Security Service > Article Commercial National Security Algorithm Suite 2.0” (CNSA 2.0) C…

高性价比之战,希喂、霍尼韦尔、安德迈宠物空气净化器真实PK

在拥有孕妇与小孩的家庭中饲养宠物&#xff0c;营造一个既温馨又健康的居家环境显得尤为重要。尽管日常的打扫与清洁工作已做得相当到位&#xff0c;但空气中仍难免悬浮着细微的宠物浮毛与不易察觉的异味&#xff0c;这些长期累积下来&#xff0c;极易成为细菌滋生的温床&#…

双一流高校某教学系统存在多个高危漏洞

脆弱资产搜集 信息搜集过程中&#xff0c;除了用常见子域名扫一遍&#xff0c;还可以通过空间搜索引擎手动搜索。我用的就是把学校名称或者缩写作为关键字&#xff0c;利用语法: web.body“关键字”&&web.body“系统” web.body“关键字”&&web.body“登录”…

05:定时器中断

中断 1、定时器T0中断2、案例&#xff1a;通过定时器T0中断来实现灯间隔1s亮灭 1、当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求&#xff0c;要求CPU暂停当前的工作&#xff0c;转而去处理这个紧急事件&#xff0c;处理完以后&#xff0c;再回到原来被中断的地方…

基于红黑树对map和set的封装

前言 前面我们已经对红黑树做了介绍和实现&#xff0c;本期我们来对红黑树进一步改造&#xff0c;然后基于改造后的红黑树封装出map和set&#xff01; 本期内容介绍 • 红黑树的改造 • 红黑树的迭代器实现 • map的封装 • set的封装 • 全部源码 ● 红黑树的改造 我们目前…

小程序项目记录

写小程序遇到的问题&#xff1a; 1、如何发行小程序 第一步点击“发行” 然后选择“小程序-微信(仅适用于uni-app)” 然后会弹出一个这样的框 微信小程序名称和AppId会自动带入 然后控制台会出现这些信息 注意&#xff1a;生成的这个路径build为线上环境部署所使用路径&…