ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: Zamyi

[求助] 求1000以内质数公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-3-26 01:17 | 显示全部楼层
看来找质数还是费力气的活。

TA的精华主题

TA的得分主题

发表于 2011-3-26 17:40 | 显示全部楼层
VBA做就很简单了,而且速度比数组公式快几万倍

27楼整批处理速度会更快,唯一缺点是,循环到i-1,实际上只需要循环到 i^0.5

所以数值大的时候就会非常慢( i^0.5 变成 i,i=100万的时候就慢一千倍,不可接受吖)

以我个人经验,其实要列出范围内所有质数的情况不多,大多数时候只需要找出一个质数来用即可

northwolve版主有个非常快的找质数程序,方法是列出一定范围内所有质数,然后判断质数的循环就不用 step 2,直接跳到下一个质数开始即可

有兴趣的可以学习一下

[ 本帖最后由 灰袍法师 于 2011-3-26 17:49 编辑 ]

VBA - 找出下一个质数的自定义函数.rar

17.06 KB, 下载次数: 30

TA的精华主题

TA的得分主题

发表于 2011-3-26 11:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
改一改,让piny版主的公式提速。
C2输入最小质数2
C3=C2+MATCH(,MMULT(N(MOD(C2+ROW($1:$20),TRANSPOSE(C$2:C2))=0),C$2:C2),)
公式2,长点:
C3=C2+MATCH(,MMULT(N(MOD(C2+ROW($1:$20),TRANSPOSE(C$2:INDEX(C:C,MATCH(MIN(C2,(C2+20)^0.5),C$1:C2))))=0),C$2:INDEX(C:C,MATCH(MIN(C2,(C2+20)^0.5),C$1:C2))),)

数组公式,按Ctrl+Shift+Enter结束。

TA的精华主题

TA的得分主题

发表于 2011-3-26 11:58 | 显示全部楼层
呵呵,看样子以后构造公式的时候,不仅要出结果,还要考虑效率.学习了

TA的精华主题

TA的得分主题

发表于 2011-3-26 12:07 | 显示全部楼层
学习了,看到了函数的魅力,变化无穷。

TA的精华主题

TA的得分主题

发表于 2011-3-26 12:34 | 显示全部楼层
=SMALL(IF(MMULT(IF(ISERR(FIND(".",ROW($2:$1000)/COLUMN(A:AF)))*ROW($2:$1000)/COLUMN(A:AF)>=COLUMN(A:AF),1,0),ROW($1:$32))=1,ROW($2:$1000),9^9),ROW()-1)
比PINY老师的长多了,思路都是判断约数个数,判断到最大开方就可以吧,没必要都判断到1000

[ 本帖最后由 半半瓶醋 于 2011-3-26 12:39 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-26 16:10 | 显示全部楼层
果然龟速,喝了两杯茶都没算完……电脑该升级了。

TA的精华主题

TA的得分主题

发表于 2011-3-26 17:01 | 显示全部楼层
凑个热闹,公式不会写
用自定义函数写一个,还有一个宏代码

自定义函数 =zs(ROW(A1))


自定义函数代码
  1. Function ZS(s%)
  2. Dim f As Boolean, arr(), a%, i%
  3. ReDim Preserve arr(1)
  4. arr(0) = 2
  5. For i = 3 To 999 Step 2
  6.    For j = 2 To i - 1
  7.       If i Mod j = 0 Then f = True: Exit For
  8.    Next
  9. If Not f Then
  10.    a = a + 1
  11.    ReDim Preserve arr(a)
  12.    arr(a) = i
  13. End If
  14. f = False
  15. Next
  16. ZS = arr(s - 1)
  17. End Function
复制代码
宏代码
  1. Sub getZS()
  2. Dim arr(), f As Boolean
  3. ReDim Preserve arr(1)
  4. arr(0) = 2
  5. For i = 3 To 999 Step 2
  6.    For j = 2 To i - 1
  7.       If i Mod j = 0 Then f = True: Exit For
  8.    Next
  9. If Not f Then
  10. a = a + 1
  11. ReDim Preserve arr(a)
  12. arr(a) = i
  13. End If
  14. f = False
  15. Next
  16. [c2].Resize(a, 1) = Application.Transpose(arr)
  17. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2011-3-26 17:19 | 显示全部楼层
我正需好好学习PINY公式,慢慢消化吸收。

[ 本帖最后由 安然祥和 于 2011-3-26 17:21 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-26 21:07 | 显示全部楼层
原帖由 灰袍法师 于 2011-3-26 17:40 发表
VBA做就很简单了,而且速度比数组公式快几万倍

27楼整批处理速度会更快,唯一缺点是,循环到i-1,实际上只需要循环到 i^0.5

所以数值大的时候就会非常慢( i^0.5 变成 i,i=100万的时候就慢一千倍,不可接受吖) ...


法师说的是
如果查找下一个质数的话,那速度就会快上许多
而且也不需要循环到i-1
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-29 14:14 , Processed in 0.041305 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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