数学——约数

news/2025/2/7 10:17:24/文章来源:https://www.cnblogs.com/cz2010124/p/18702138

定义

设有整数 \(a\)\(b\) ,如果存在整数 \(q\) 使得 \(a = b \times q\) ,则称 \(b\)\(a\) 的约数, \(a\)\(b\) 的倍数,记为 \(b\ |\ a\)

算数基本定理的推论

在算数基本定理中,任何一个大于 \(1\) 的正整数 \(N\) 都能唯一分解为有限个质数的乘积,可写作:

\[N = p_1^{c_1}\times p_2^{c_2}\times \cdots \times p_m^{c_m} = \prod_{i=1}^{m}p_i^{c_i} \]

其中:\(c_i \in \mathbb{N}_+\)\(p_i\) 都是质数,并且满足 \(p_1 < p_2 < \cdots<p_m\)

则有以下推论:

\(N\) 的正约数集合为:

\[\left\{p_1^{b_1}\times p_2^{b_2}\times\cdots\times p_m^{b_m}=\prod_{i=1}^m p_i^{b_i}\right\}, 其中 b_i\in[0,\ c_i] \]

\(N\) 的正约数个数为:

\[(c_1 + 1)\times(c_2 + 1)\times\cdots\times(c_m + 1)=\prod_{i = 1}^m (c_i + 1) \]

\(N\) 的所有正约数和为:

\[\begin{aligned} \sigma(N) &=\sum_{b_1=0}^{c_1}\sum_{b_2=0}^{c_2}\cdots\sum_{b_m=0}^{c_m}p_1^{b_1}\times p_2^{c_2}\times\cdots\times p_m^{c_m}\\ &=\left(\sum_{b_1=0}^{c_1}p_1^{b_1}\right)\times\left(\sum_{b_2=0}^{c_2}p_2^{b_2}\right)\times\cdots\times\left(\sum_{b_m=0}^{c_m}p_m^{b_m}\right)\\ &=\prod_{i=1}^{m}\sum_{j=0}^{c_i}p_i^j \end{aligned} \]

\(N\) 的正约数合集

试除法

如果 \(n\) 有约数 \(a\)\(b\) ,且 \(a\times b=n\) 。如果 \(a\le\sqrt n\) ,则 \(b\ge\sqrt n\) ,反之亦然。换句话说,约束是成对出现的(除了完全平方数 \(\sqrt n\) 单独出现)。

所以,只需要扫描 \(1\sim\sqrt n\) 的每个整数 \(x\) ,判断 \(x\) 是否能整除 \(n\) ,若能,则 \(x\)\(\large\frac{n}{x}\) 都是 \(n\) 的约数。时间复杂度为 \(\mathcal{O}(\sqrt n)\)

试除法的推论

由上述的扫描过程不难发现一个整数 \(n\) 的约数个数至多有 \(2\sqrt n\) 个。

代码:

int cnt;
int num[N];for (int i = 1; i * i <= n; i++) {if (!(n % i)) {num[++cnt] = i;if (i != n / i) num[++cnt] = n / i;}
}

倍数法

不难发现,试除法在查找单个数的约数集合效率较高,但是不适用于批量查询,我们考虑优化。

\(\text{Eratosthenes}\) 筛法过程中我们可发现大量数字中一般会有共同的约数,此时进行试除法就会重复判断,所以我们利用正难则反的逆向思维选择用数字 \(x\) 本身去标记它的倍数 \(x, 2x, \cdots,\large{\frac{n}{x}}x\)

时间复杂度为 \(\mathcal{O}\left(n + \large{\frac{n}{2}}+\large{\frac{n}{3}}+\cdots+\large{\frac{n}{n}}\right)=\mathcal{O}\left(\sum\limits_{i=1}^n\large\frac{n}{i}\right) = \mathcal{O}(n \log n)\)

vector<int> num[N];for (int i = 1; i <= n; i++) for (int j = 1; j * i <= n; j++) num[i * j].push_back(i);

倍数法的推论

由此可见, \(1\sim N\) 中每个数的约数个数总和大约为 \(n \log n\)

调和级数

在上述时间复杂度中出现了一个很奇怪的式子,就是:\(\large{\sum\limits_{i=1}^n\frac{n}{i}} = n\sum\limits_{i=1} ^n\frac{1}{i}\) 。要想求解它,我们需要了解一下调和级数

定义

\[H_n = \sum_{i=1}^n\frac{1}{i}=1+\frac{1}{2}+\frac{1}{3}+\cdots+\frac{1}{n} \]

性质

  1. 发散性,即:

\[\lim_{n\to\infty} H_n=+\infty \]

  1. 渐近性,即:

\[H_n=\ln n + \gamma + \varepsilon n\approx\log n \]

  • 其中

\[\gamma \approx0.57721 56649 01532\\ \varepsilon n \approx \dfrac{1}{2n} \]

最大公约数

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

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

相关文章

【数学】信息论之从熵、惊奇到交叉熵、KL散度和互信息

转自:https://www.cnblogs.com/justLittleStar/p/17322197.html 一、熵(PRML) 考虑将A地观测的一个随机变量x,编码后传输到B地。这个随机变量有8种可能的状态,每个状态都是等可能的。为了把x的值传给接收者,需要传输一个3-bits的消息。注意,这个变量的熵由下式给出:⾮均…

用多项式回归分析简单投掷数据-训练投石机数据预测模型

用多项式回归分析简单投掷数据 进阶实验:训练投石机数据预测模型 问题描述:(1)投掷角度不变,已知电机速度,如何得出实际投掷距离?(2)其电机速度(motor_speed)和投掷距离(distance)的对应关系有什么关系? 投掷角度不变,电 机速度与投掷距离 的数据集展示: 学习:i可以通过…

css背景模糊效果

下面是效果下面是实现代码<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-…

线性回归模型训练-训练温度传感器数据预测模型

基础实验:训练温度传感器数据预测模型 任务描述:LM35是科创作品制作中常用的温度传感器(1)已知电压值, 如何得出实际温度值?(2)输出电压(Sensor)和真实温度(Temperature)有什么关 系?请借助大模型生成这两列数据的关系图 /目录学习:可以通过机器学习,训练传感器数据预测模型…

【分享】银行业如何实现内外网文件传输,保持核心竞争力?

数据要素是数字经济的重要基石,也是国家经济安全的关键要素。银行业数据因其数据体量大、数据类型多、涉及主体庞大及应用场景复杂等天然特征,在数据流转上面临风险和挑战,包括法律法规层面、安全层面、效率层面等。为响应和落实国家层面对于金融行业网络安全的建设要求,同…

SMT32的HEX文件里加入固件版本的方法(转)

使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。 代码代码如下: //------------------------------------------------------------------------------#include <absacc.h>//------------------------------------------------------------------------------#d…

uniapp 自定义tabBar组件 custom-tab-bar

custom-tab-bar 自定义tabBar组件。 在小程序和App端,为提升性能,在 pages.json 里配置固定的原生tabBar。但在H5端,这一设计并不会提升性能。 同时,H5端尤其是PC宽屏,对tabBar的位置和样式有更灵活的需求,tabBar作为一级导航,更多的时候是在PC网页顶部而不是底部。 自定…

无法连接/访问 Linux虚拟的中的端口(Redis)

Could not connect to Redis at 192.168.137.132:6379: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。当出现 “Could not connect to Redis at 192.168.137.132:6379: No route to host” 错误,意味着客户端无法找到通往 Redis 服务器(IP 为 192…

钉钉发送告警(非@)

环境: OS:Centos 7 python:2.7[root@yunwei-zabbix-1000001-prd alertscripts]# more dingtalk_middleware.py #!/usr/bin/env python #-*- coding: utf-8 -*-import sys, json, urllib2def Dingtalk(message):content = messageurl = "https://oapi.dingtalk.com/robot/…

为GitLab配置Microsoft Graph作为邮件收发工具

先决条件Microsoft/Office 365订阅(Exchange是必须的)并添加一个gitlab专用的账户,本文使用E5开发者订阅 部署好的GitLab,参考上一篇文章步骤一、 配置Microsoft Entra 1. 注册应用程序 登录Azure门户,进入Microsoft Entra ID,选择管理-应用注册-新注册填写你想要的名称,…

C# 深度学习框架 TorchSharp 原生训练模型和图像识别-自定义网络模型和识别手写数字

目录使用 Torch 训练模型定义神经网络加载数据集创建网络模型定义损失函数训练识别手写图像 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址:https://torch.whuanle.cn 电子书仓库:https://github.com/whuanle/cs_pytorch Maomi.Torch 项目仓库:https://github.co…