..质数..

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

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.mfbz.cn/a/793026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue 3 与 TypeScript:最佳实践详解

大家好,我是CodeQi! 很多人问我为什么要用TypeScript? 因为 Vue3 喜欢它! 开个玩笑... 在我们开始探索 Vue 3 和 TypeScript 最佳实践之前,让我们先打个比方。 如果你曾经尝试过在没有 GPS 的情况下开车到一个陌生的地方,你可能会知道那种迷失方向的感觉。 而 Typ…

oracle 23ai新的后台进程bgnn介绍

前言 昨天发文研究了哪些oracle 后台不能杀 具体文章如下链接 oracle哪些后台进程不能杀&#xff1f;-CSDN博客 其中23ai中新增了一个后台进程bgnn 但是在oracle 23ai database reference中并没有找到该后台进程 有点不甘心就开了个SR&#xff0c;找oracle 官方来看看这个后…

[Qt] Qt Creator中,新建QT文件时选择界面模版下的各选项

在Qt Creator中&#xff0c;新建文件时选择界面模版下的各选项具有特定的意义&#xff0c;这些选项主要帮助开发者根据项目需求快速生成不同类型的文件。以下是对这些选项的详细解释&#xff1a; 0. Qt Item Model 意义&#xff1a;列表模型是Qt中用于表示和操作数据的强大抽…

Sqli-labs 3

1.按照路径http://localhost/sqli-labs/sqli-labs-master/Less-3/进入 2.判断注入类型----字符型 Payload&#xff1a;?id1’) and 11-- 注&#xff1a;根据报错提示的语法错误&#xff0c;在第一行中使用接近’union select 1,2,3--’)的正确语法 3.判断注入点&#xff1a;…

scss概念及使用

目录 scss是什么 scss和css比较 scss的使用 声明变量 区分默认变量 区分全局变量和局部变量 嵌套语法 选择器嵌套 基本嵌套 嵌套中的父选择器引用&#xff08;&&#xff09; 嵌套的注意事项 嵌套的嵌套 属性嵌套 基本属性嵌套 嵌套的注意事项 继承 基本用…

为什么使用代理IP无法访问网站

代理IP可以为用户在访问网站时提供更多的便利性和匿名性&#xff0c;但有时用户使用代理IP后可能会遇到无法访问目标网站的问题。这可能会导致用户无法完成所需的业务要求&#xff0c;给用户带来麻烦。使用代理IP时&#xff0c;您可能会因为各种原因而无法访问您的网站。以下是…

AutoHotKey自动热键(八)脚本快速暂停与重新加载

我们在编辑脚本的时候,可以添加快捷键来改变脚本的状态 ;暂停脚本 F11::Suspend;重置脚本 F12::Reloadreload用来重置脚本 我们可以在脚本开头加上标签提示脚本重启成功 ToolTip, 脚本已经重启 Sleep, 1000 ToolTip第二个ToolTip是用来关闭提示器用的 这个提示功能一定要写…

深入探索大语言模型

深入探索大语言模型 引言 大语言模型&#xff08;LLM&#xff09;是现代人工智能领域中最为重要的突破之一。这些模型在自然语言处理&#xff08;NLP&#xff09;任务中展示了惊人的能力&#xff0c;从文本生成到问答系统&#xff0c;无所不包。本文将从多个角度全面介绍大语…

Dify 与 Xinference 最佳组合 GPU 环境部署全流程

背景介绍 在前一篇文章 RAG 项目对比 之后&#xff0c;确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。 Dify 是将模型的加载独立出去的&#xff0c;因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference&#xff0c;理由如下&…

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; …

短视频矩阵:批量发布的秘密揭秘

在数字化时代&#xff0c;短视频已经成为一种广受欢迎的媒体形式。无论是用于品牌推广、产品营销还是个人创作&#xff0c;短视频都提供了一种直观、生动的方式来吸引观众的注意力。然而&#xff0c;有效地制作、管理和发布短视频对于许多创作者和企业来说是一个挑战。 为此&am…

C++ 现代教程三

// 模板参数类型区分 template <class T> static std::string cppdemangle() {std::string s{cppdemangle(typeid(std::remove_cv_t<std::remove_reference_t<T>>))};if (std::is_const_v<std::remove_reference_t<T>>)s " const";if…

Linux 入门教程 by 程序员鱼皮

本文作者&#xff1a;程序员鱼皮 免费编程学习 - 编程导航网&#xff1a;https://www.code-nav.cn 大家好&#xff0c;我是鱼皮。 前两天我学编程的老弟小阿巴过生日&#xff0c;我问他想要什么礼物。 本来以为他会要什么游戏机、Q 币卡、鼠标键盘啥的&#xff0c;结果小阿巴…

【car】深入浅出学习机械燃油车知识、结构、原理、维修、保养、改装、编程

汽车的五大总成通常是指发动机、变速器、前后桥、车架和悬挂系统。 发动机&#xff1a;是汽车的动力来源&#xff0c;负责将燃料的化学能转化为机械能&#xff0c;驱动汽车行驶。常见的发动机类型有内燃机&#xff08;如汽油发动机、柴油发动机&#xff09;和电动机&#xff0…

网络安全应急响应信息收集利器-Eagle_Eye

项目介绍: 网络安全应急响应信息收集利器 - Eagle_Eye&#xff1a;您的终端信息自动收集专家 在网络安全的紧急时刻&#xff0c;每一秒都至关重要。Eagle_Eye&#xff0c;这款专为应急响应设计的工具&#xff0c;如同一位随时待命的侦察兵&#xff0c;能够在危机时刻迅速收集…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下&#xff1a;这里使用的是主机host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

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

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

2024年新一代WebOffice内嵌网页组件——猿大师办公助手

背景 WebOffice控件这个中间件软件产品已存在二十余年&#xff0c;在国内众多大中小型企业、各级政府机关、科研机构和学校等事业单位的OA、ERP、文档系统、云盘等信息化B/S系统中得到了大量使用&#xff0c;为我国的信息化事业也做出了不小贡献。随着操作系统、浏览器及Offic…

05:定时器中断

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

【数据分享】2021-2100年中国1km分辨率多情景多模式逐月降水量数据集

今天我们给大家分享一份根据IPCC耦合模式比较计划第六阶段&#xff08;CMIP6&#xff09;发布的全球>100 km气候模式数据集以及WorldClim发布的全球高分辨率气候数据集&#xff0c;通过空间降尺度方法得到的2021-2100年中国1km分辨率多情景多模式逐月降水量数据集。 数据来…