ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 800|回复: 15

[求助] 计算两个正整数相乘等于1亿的所有组合

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-11 22:36 来自手机 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
普通的函数穷举肯定费时费力,超出单列行上限,所以求vba代码或其他思路。

TA的精华主题

TA的得分主题

发表于 2024-1-11 22:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub aa()
  2. arr = zuhe(100000000)
  3. Range("a1").Resize(UBound(arr), 2) = arr
  4. End Sub

  5. Function zuhe(a)
  6. s = Int(a ^ 0.5)
  7. ReDim srr(1 To s, 1 To 2)
  8. s1 = 0
  9. For i = 1 To s
  10.     b = a / i
  11.     If b = Int(b) Then
  12.         s1 = s1 + 1
  13.         srr(s1, 1) = i
  14.         srr(s1, 2) = b
  15.     End If
  16. Next
  17. ReDim scrr(1 To s1, 1 To 2)
  18. For i = 1 To s1
  19.     scrr(i, 1) = srr(i, 1)
  20.     scrr(i, 2) = srr(i, 2)
  21. Next
  22. zuhe = scrr
  23. End Function

复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-11 23:00 | 显示全部楼层
用函数穷举也很快,这点计算不算什么。
A1=IF(MOD(10^8,ROW())=0,ROW(),"")
B1=IF(A1="","",10^8/A1)
将公式下拉到10000行。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-11 23:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-1-11 23:27 | 显示全部楼层
  1. Sub findFactors()
  2.     Dim num As Long
  3.     Dim i As Long
  4.     Dim row As Long
  5.     Dim 数组() As Long
  6.    
  7.     num = 100000000 '乘积是正整数(偶数、个位为0)
  8.     row = 0
  9.    
  10.     ReDim 数组(1 To Rows.Count, 1 To 2)
  11.    
  12.     For i = 1 To num
  13.         If num Mod i = 0 Then ' Mod,判断是否能够除尽
  14.             row = row + 1
  15.             数组(row, 1) = i
  16.             数组(row, 2) = num / i
  17.         End If
  18.     Next i
  19.     Range("A1:B" & row).Value = 数组
  20. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-12 07:28 | 显示全部楼层

正解,确定是81种组合,和我之前计算的组合类型一致,但只是无法了解其中的组合逻辑。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-12 07:33 | 显示全部楼层
yjh_27 发表于 2024-1-11 23:03
代码审核中。。。

刚试了试代码,也算是穷举完了,乘数和被乘数交换率总共81种可能性,厉害

TA的精华主题

TA的得分主题

发表于 2024-1-12 08:45 | 显示全部楼层
开庸秦忠 发表于 2024-1-12 07:28
正解,确定是81种组合,和我之前计算的组合类型一致,但只是无法了解其中的组合逻辑。

正解应该是41个吧,象2*50000000和50000000*2应该算同一个组合了。
QQ图片20240112084548.png

TA的精华主题

TA的得分主题

发表于 2024-1-12 09:02 | 显示全部楼层
41个不重复组合的代码,供参考。。。
QQ图片20240112085736.png

求两个正整数相乘等于1亿的所有不重复组合.7z

14.35 KB, 下载次数: 4

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-12 09:54 | 显示全部楼层
本帖最后由 fgq5910 于 2024-1-12 09:55 编辑

在组合中认为[a,b],[b,a]是等效的,在排列中认为两者是不等的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 09:21 , Processed in 0.053666 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表