在LibreOffice Calc中计算正整数因数个数的方法咨询
在LibreOffice Calc中计算正整数因数个数的方法咨询
嗨,我来给你说说怎么在LibreOffice Calc里搞定正整数因数个数的计算,刚好你说的是A列放整数、B列出结果的场景,这有两个实用的方法,你可以根据需求选:
数组公式法(适合日常基础使用)
假设要计算A1单元格里的数的因数个数,直接在B1单元格输入下面的公式,输入完成后别直接回车,要按Ctrl+Shift+Enter来确认(这是数组公式的特殊确认方式):=SUMPRODUCT(1*(MOD(A1,ROW(INDIRECT("1:"&A1)))=0))
简单解释下这个公式的逻辑:ROW(INDIRECT("1:"&A1))会生成从1到A1数值的整数序列MOD(A1, 序列中的每个数)会算出A1除以每个数的余数,余数为0的就是A1的因数1*(...)把余数为0的布尔值转成1,其余转成0SUMPRODUCT把这些1加起来,总数就是因数的个数
如果A列有多个需要计算的数,把B1的公式往下拖,就能自动适配对应的A单元格啦。
自定义宏函数(适合频繁使用或计算大数的场景)
要是你经常需要做这个计算,或者要处理很大的正整数,数组公式可能有点卡,这时候可以自己写个宏函数:- 打开Calc后按
Alt+F11打开宏编辑器 - 在左侧的项目树里右键点击你的文档,选「插入」→「模块」
- 在弹出的编辑窗口里粘贴这段代码:
Function CountFactors(n As Integer) As Integer Dim count As Integer count = 0 For i = 1 To Sqr(n) If n Mod i = 0 Then If i = n / i Then count = count + 1 Else count = count + 2 End If End If Next i CountFactors = count End Function- 保存宏后回到表格,在B1里输入
=CountFactors(A1),回车就能得到结果,同样可以往下拖应用到其他单元格。这个方法只循环到数值的平方根,计算效率比数组公式高很多。
- 打开Calc后按
小提醒
- 一定要确保A列里的是正整数,如果是小数或者负数,公式会出错。你可以给数组公式加个判断,比如改成:
=IF(A1>0,SUMPRODUCT(1*(MOD(A1,ROW(INDIRECT("1:"&A1)))=0)),"请输入正整数") - 对于特别大的数(比如超过10^6),优先用自定义宏函数,速度会快不少。
备注:内容来源于stack exchange,提问作者user52949
相关产品推荐
相关产品推荐

