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 23:39 | 显示全部楼层
我这里有个求100以内质数的公式,可参考

=TEXT(SMALL(IF(MMULT(--(MOD(ROW(2:100),TRANSPOSE(ROW(2:100)))=0),ROW(2:100)^0)=1,ROW(2:100),10000),ROW(1:99)),"[>1000]"""";0")

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-3-27 10:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
支持29楼的看法,函数处理这种问题勉为其难!

TA的精华主题

TA的得分主题

发表于 2011-3-27 22:55 | 显示全部楼层
原帖由 山菊花 于 2011-3-26 11:53 发表
改一改,让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 ...

其中的数值20是要随着范围的扩大而变化的。能否把20也改成变化的?

TA的精华主题

TA的得分主题

发表于 2011-3-27 23:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
改成动态 可能会影响效能

需视题意而修正

TA的精华主题

TA的得分主题

发表于 2011-3-27 23:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 piny 于 2011-3-27 23:13 发表
改成动态 可能会影响效能

需视题意而修正

比如你的公式到1129后就出现错误,换成30,就能求到1327,换,50,就能求到19609,但越大越慢,能动态随row()变化最好。这个修正值如何确定?

TA的精华主题

TA的得分主题

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

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

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

找下一个质数,此例当然不错,但27楼的缺点还有:是合数的不必去检验,比如i^0.5=997,实际检查168个质数就可以了:
Sub getZS()
Dim arr(), f As Boolean
n = 1000
ReDim arr(n - 1)
arr(0) = 2
m = 1
For i = 3 To n Step 2
   Do While arr(j) * arr(j) <= i And j < m
      If i Mod arr(j) = 0 Then f = True: Exit Do
      j = j + 1
   Loop
If Not f Then
  arr(m) = i
  m = m + 1
End If
f = False
j = 0
Next
[a1].Resize(m, 1) = Application.Transpose(arr)
End Sub

TA的精华主题

TA的得分主题

发表于 2011-3-28 20:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个问题的关键是数组中的元素少一点,才能有较快的运算速度:
E2=2
E3=3
E4=5
E5=MIN(IF(MMULT(TRANSPOSE(E$2:E4),--(MOD(6*ROUND(E4/6,)+{1,5,7,11,13,17,19},E$2:E4)=0))=0,6*ROUND(E4/6,)+{1,5,7,11,13,17,19}))
数组公式,下拖。

TA的精华主题

TA的得分主题

发表于 2011-3-31 18:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
A1:A1229输入:=TRANSPOSE(zs(10000)),ctrl+shift+ebter三键结束,求10000内质数快得不得了

Book1.rar

18.15 KB, 下载次数: 35

TA的精华主题

TA的得分主题

发表于 2012-11-5 20:31 | 显示全部楼层
lhx120824 发表于 2011-3-27 23:25
比如你的公式到1129后就出现错误,换成30,就能求到1327,换,50,就能求到19609,但越大越慢,能动态随ro ...

=E3+MATCH(,MMULT(N(MOD(E3+ROW($1:$20)*2,TRANSPOSE(E$3:E3))=0),E$3:E3),)*2

把山菊花改进后的公式再简单修改下,就能得到更大的质数表了,试了下,这个公式最大到15689,如果把ROW($1:$20)换成30,30000以内的质数毫无压力(以上的未测试),而且似乎速度也快了不少

TA的精华主题

TA的得分主题

发表于 2012-11-5 22:25 | 显示全部楼层
我也来一个,
C3输入,最好用多单元格公式.
=SMALL(IF(FREQUENCY(ROW($2:$500)*COLUMN($B:$AF),ROW($3:$1000))=0,ROW($3:$1001),9999),ROW()-2)
不适用于2,试了一下,运算还是比较多快的.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-26 20:53 , Processed in 0.045056 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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