求一个正整数所有正因数的和

2024-04-26 00:08
文章标签 所有 正整数 因数

本文主要是介绍求一个正整数所有正因数的和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、普通的眼光
    • 1.涵盖
    • 1.不重复
  • 二、奇葩的眼光
  • 引申
  • 总结


前言

一段时间里不知道要写什么好,遇不见适合分享的东西,也懒了一点儿。本篇是关于求正整数正因数和的,另外有一些类似的引申。


一、普通的眼光

首先,一个正整数可以根据素因式分解唯一定理得到一个唯一的素数乘积的表示形式:

a = p 1 α 1 p 2 α 2 … p m α m a=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_m^{\alpha_m} a=p1α1p2α2pmαm

于是它的任意一个因式可以表示为:

p 1 β 1 p 2 β 2 … p m β m p_1^{\beta_1}p_2^{\beta_2}\dots p_m^{\beta_m} p1β1p2β2pmβm

其中 α i \;\alpha_i\; αi β i \;\beta_i\; βi满足 α i ≥ β i \;\alpha_i\ge\beta_i\; αiβi
然后我们考虑一个式子:

( 1 + p 1 + p 1 2 + ⋯ + p 1 α 1 ) ( 1 + p 2 + p 2 2 + ⋯ + p 2 α 2 ) … ( 1 + p m + p m 2 + ⋯ + p m α m ) (1+p_1+p_1^2+\dots+p_1^{\alpha_1})(1+p_2+p_2^2+\dots+p_2^{\alpha_2})\dots(1+p_m+p_m^2+\dots+p_m^{\alpha_m}) (1+p1+p12++p1α1)(1+p2+p22++p2α2)(1+pm+pm2++pmαm)

把这个式子乘开后每一项都是 a \;a\; a的一个因数,如果我们能说明这些因数涵盖了 a \;a\; a的所有因数并且没有重复就可以说明这个式子的结果与 a \;a\; a的所有正因数和相等。

1.涵盖

只需要注意到对于任意的 p 1 β 1 p 2 β 2 … p m β m \;p_1^{\beta_1}p_2^{\beta_2}\dots p_m^{\beta_m}\; p1β1p2β2pmβm,对应于乘积式里每个素数对应次幂的项的乘积。

1.不重复

根据素因式分解唯一定理即知,每一个因数只有一种分解,只对应于唯一一个项,如果有两个项对应的数字相同则与素因式分解唯一定理矛盾。

二、奇葩的眼光

先来考虑一个多项式:
( x + a 1 ) ( x + a 2 ) … ( x + a m ) (x+a_1)(x+a_2)\dots(x+a_m) (x+a1)(x+a2)(x+am)
这个多项式的展开式中,根据韦达定理,或者说这里本身就是推导韦达定理的一种思路,我们可以知道常数项等于 a 1 a 2 … a m \;a_1a_2\dots a_m\; a1a2am m \;m\; m次项的系数是 1 \;1\; 1 m − 1 \;m-1\; m1次项系数是 ∑ a i \sum a_i ai m − 1 \;m-1\; m1次项系数是 ∑ i ≠ j 且 i ≤ j a i a j \sum\limits_{i\not=j且i\le j} a_ia_j i=jijaiaj … \;\dots\;

很容易看出,如果 a 1 \;a_1\; a1 a 2 \;a_2\; a2 … \;\dots\; a m \;a_m\; am都是素数,则 a 1 a 2 … a m \;a_1a_2\dots a_m\; a1a2am的所有正因数之和即为 x = 1 \;x=1\; x=1时的 ( x + a 1 ) ( x + a 2 ) … ( x + a m ) \;(x+a_1)(x+a_2)\dots(x+a_m)\; (x+a1)(x+a2)(x+am)

那么对于更复杂一点儿的情况,即素因式分解存在次幂高于一次的正整数,只要先考虑

( x + a 1 + b ) ( x + a 2 ) ( x + a 3 ) … ( x + a m ) (x+a_1+b)(x+a_2)(x+a_3)\dots(x+a_m) (x+a1+b)(x+a2)(x+a3)(x+am)

代表了什么,再考虑

( x + a ( 1 , 1 ) + a ( 1 , 2 ) + ⋯ + a ( 1 , α 1 ) ) ( x + a ( 2 , 1 ) + a ( 2 , 2 ) + ⋯ + a ( 2 , α 2 ) ) ( x + a ( 3 , 1 ) + a ( 3 , 2 ) + ⋯ + a ( 3 , α 3 ) ) … ( x + a ( m , 1 ) + a ( m , 2 ) + ⋯ + a ( m , α m ) ) (x+a_{(1,1)}+a_{(1,2)}+\dots+a_{(1,\alpha_1)})(x+a_{(2,1)}+a_{(2,2)}+\dots+a_{(2,\alpha_2)})(x+a_{(3,1)}+a_{(3,2)}+\dots+a_{(3,\alpha_3)})\dots(x+a_{(m,1)}+a_{(m,2)}+\dots+a_{(m,\alpha_m)}) (x+a(1,1)+a(1,2)++a(1,α1))(x+a(2,1)+a(2,2)++a(2,α2))(x+a(3,1)+a(3,2)++a(3,α3))(x+a(m,1)+a(m,2)++a(m,αm))

代表了什么,然后令 x = 1 \;x=1\; x=1,就可以弄清楚

( 1 + p 1 + p 1 2 + ⋯ + p 1 α 1 ) ( 1 + p 2 + p 2 2 + ⋯ + p 2 α 2 ) … ( 1 + p m + p m 2 + ⋯ + p m α m ) (1+p_1+p_1^2+\dots+p_1^{\alpha_1})(1+p_2+p_2^2+\dots+p_2^{\alpha_2})\dots(1+p_m+p_m^2+\dots+p_m^{\alpha_m}) (1+p1+p12++p1α1)(1+p2+p22++p2α2)(1+pm+pm2++pmαm)

是怎么来的了

引申

对于任意一个有限的元素都是实数的集合 S = { a 1 , a 2 , … , a n } \;S=\{a_1,a_2,\dots,a_n\}\; S={a1,a2,,an},我们定义它的所有元素的积为 P ( S ) \;P(S)\; P(S),另外令 P ( ∅ ) = 1 \;P(\varnothing)=1 \; P()=1,根据上面一段的内容,很容易知道
∑ A ⊂ S P ( A ) = ∏ i = 1 n ( 1 + a i ) \sum\limits_{A\subset S}P(A)=\prod\limits_{i=1}^{n}(1+a_i) ASP(A)=i=1n(1+ai)

再进行延伸一下,如果我们令集合 S \;S\; S中的元素可以重复, a i \;a_i\; ai重复了 m ( i ) \;m(i)\; m(i)次,则有:
∑ A ⊂ S P ( A ) = ∏ i = 1 n ( 1 + ∑ j = 1 m ( i ) a ( i , j ) ) \sum\limits_{A\subset S}P(A)=\prod\limits_{i=1}^{n}(1+\sum\limits_{j=1}^{m(i)}a_{(i,j)}) ASP(A)=i=1n(1+j=1m(i)a(i,j))

上面这两个式子就比较广泛了,举两个例子,可以当做小练习。
1.令 S = { 1 2 , 1 3 , … , 1 100 } \;S=\{\frac{1}{2},\frac{1}{3},\dots,\frac{1}{100}\}\; S={21,31,,1001},求出来的结果十分奇妙。
2.在上面的第二个式子里令所有的 a ( i , j ) = 1 \;a_{(i,j)}=1\; a(i,j)=1,则它的结果由求因数和变成了统计因数的个数。

总结

本总结与上文无关。学数学的时候经常会感到困难,不过这些也都是小问题,因为他们不会始终都是自己的困难,当自己第二次看的时候松动了,第三次第四次看,基本不再是困难了。因此啃数学书的时候不用因为看不懂而害怕,不用因为生涩而低估自己,多看几次最后看懂的时候或许赞叹一声不错,或许内心会感觉——就这?

这篇关于求一个正整数所有正因数的和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936170

相关文章

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Collection的所有的方法演示

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class TestCollection {/*** @param args* Collection的所有的方法演示* 此程序没有使用泛型,所以可以添加任意类型* 以后如果写到泛型会补充这一方面的内容*/public s

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

获取所有classpath指定包下类的所有子类

1.问题 开发过程中,有时需要找到所有classpath下,特定包下某个类的所有子类,如何做到? 2. 实现 比较常见的解决方案是自己遍历目录,查找所有.class文件。 下面这个方法使用spring工具类实现,简化过程,不再需要自己遍历目录 /*** 获取在指定包下某个class的所有非抽象子类** @param parentClass 父类* @param packagePat

为libpng不同架构创建构建目录、编译、安装以及合并库文件的所有步骤。

好的。既然你已经有了 libpng 的源代码,并且当前处在它的目录下,我们可以简化脚本,不再需要下载和解压源代码这一步。以下是修改后的脚本:```sh#!/bin/bash# 当前目录即 libpng 源代码目录LIBPNG_SRC_DIR=$(pwd)# 设置工作目录WORK_DIR=$(pwd)/libpng_buildBUILD_DIR_X86_64="$WORK_DIR/build

Mybatis logj日志配置问题 以及日志相关的所有问题

使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志。有些时候就不能。 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都不起作用。 有些时候,我们没做什么配置就能输出日志.... 这是一个让无数人烦躁的问题。其实解决问题很容易(我过了这么久才解决,以前都用拦截器输出)。 这是一个普大喜奔的日子,让我们一起来看看如何解决mybat

力扣 797. 所有可能路径【DFS】

1. 题目 2. 代码 DFS , 直接见代码 class Solution {public:vector<int> path;vector<vector<int>> res; // 结果集void dfs(vector<vector<int>>& graph, int cur, int n){// 找出所有从节点 0 到节点 n-1 的路径// 下标从 0 开始的if (

Linux下删除某个文件之外的其他所有文件

在windows下要删除一个文件夹下除某个文件之外的其他所有文件很简单,选择这个文件,再反选即可。Linux下可能很多人不知道如何实现这种效果,这里分享2种方法: 1 使用xargs ls | grep -v xxx | xargs rm -r 使用时将xxx替换成要保留的文件名即可。 如果有相似的文件名,可以使用正则表达式匹配完整的文件名,如: 有两个相似的文件名33和331,此时要保留