| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2564 人关注过本帖
标题:[求助] 求一个算法
只看楼主 加入收藏
kx25
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-22
收藏
得分:0 



下面的代码能处理 不大于 999999999(九个9)的自然数,速度比原来的快

Private Sub Command1_Click()
Dim 自然数 As Long
Dim B As Long
Dim 质数() As Long
Dim i As Long
Dim J As Long
Dim K As Long
Dim 质数表(41) As Long

质数表(1) = 2
质数表(2) = 3
质数表(3) = 5
质数表(4) = 7
质数表(5) = 11
质数表(6) = 13
质数表(7) = 17
质数表(8) = 19
质数表(9) = 23
质数表(10) = 29
质数表(11) = 31
质数表(12) = 37
质数表(13) = 41
质数表(14) = 43
质数表(15) = 47
质数表(16) = 53
质数表(17) = 59
质数表(18) = 61
质数表(19) = 67
质数表(20) = 71
质数表(21) = 73
质数表(22) = 79
质数表(23) = 83
质数表(24) = 89
质数表(25) = 97
质数表(26) = 101
质数表(27) = 103
质数表(28) = 107
质数表(29) = 109
质数表(30) = 113
质数表(31) = 127
质数表(32) = 127
质数表(33) = 131
质数表(34) = 137
质数表(35) = 139
质数表(36) = 151
质数表(37) = 157
质数表(38) = 163
质数表(39) = 167
质数表(40) = 173

Command1.Enabled = False
自然数 = Text2.Text

If 自然数 > 999999999 Then
MsgBox "嘿嘿,暂时不支持 自然数 > 999999999 (九个9)!"
Exit Sub
End If

K = 自然数

If 自然数 > 1000 Then '自然数>1000 ,这里可改合适些,以免较小的自然数循环判断过多

For i = 1 To 40

B = Fix(自然数 / 质数表(i))
If B * 质数表(i) = 自然数 Then
J = J + 1
ReDim Preserve 质数(1 To J) As Long
质数(J) = 质数表(i)
自然数 = B
End If

Next

End If

For i = 2 To 自然数
B = Fix(自然数 / i)
If B * i = 自然数 Then
J = J + 1
ReDim Preserve 质数(1 To J) As Long
质数(J) = i
自然数 = B
i = 1
End If
Next

Text1.Text = K & " = "
For i = 1 To J
If Text1.Text <> K & " = " Then Text1.Text = Text1.Text & " * "
Text1.Text = Text1.Text & 质数(i)
Next
Command1.Enabled = True
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
'只能输入整数
Select Case KeyAscii
Case Asc("0") To Asc("9"), vbKeyBack
'nop
Case Else
KeyAscii = 0
End Select

End Sub


菜鸟在渐渐变老,终有一天会成为老鸟, 并为自由翱翔作最后的准备!
2007-05-14 03:10
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
得分:0 
因为我是用了集合,所以影响了速度。

2007-05-14 12:32
gkimjatl
Rank: 1
等 级:新手上路
帖 子:106
专家分:0
注 册:2007-3-20
收藏
得分:0 
全是高手..哎.我要好久才你们这样的水平啊....55555
2007-05-14 13:01
文不对题
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-5-10
收藏
得分:0 
27楼 hyhhd 老大
问个弱的问题:Option Explicit 是什么意思?一定必须要吗?
2007-05-14 17:11
gkimjatl
Rank: 1
等 级:新手上路
帖 子:106
专家分:0
注 册:2007-3-20
收藏
得分:0 
回复:(文不对题)27楼 hyhhd 老大问个弱的问题:Opt...

Option Explicit 语句
在模块级别中使用,强制显式声明模块中的所有变量。
2007-05-14 17:13
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
得分:0 
回复:(kx25)以下是引用hyhhd在2007-4-28 21:54:22的...
如果是使用数组,那么在建立dll文件将出现错误。你知道dll文件对我来说太重要了。dll文件不允许有redim C() as ...这样的句型出现,也许这就是vb不能完全面向对象的根本原因吧!如果能建立自己的dll文件,你知道那是多么爽的一件事吗?所以,我现在只能想到使用“collection”-集合。也许这是一种习惯。我曾经看过一本微软的“vb用户手册”,那是我借的,当时时间比较仓卒,我先现在后悔啊,里面全是精华,微软关于vb的用户手册。我真后悔没有全部复印!什么msdn,这算什么?当然,vb只是一种工具,也许够用就ok了!我想对我来说,根据有吸引力。当然,基本的原理是一样的,关键你要有“悟性”,不管你是干什么!曾经有“股市人生,人生股市”,那么对专业的人来说也许有“编程人生,人生编程”!不是吗?

2007-05-14 21:08
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
得分:0 
我建议你最好使用“Option Explicit ”,这是个经验问题!

2007-05-14 21:09
gkimjatl
Rank: 1
等 级:新手上路
帖 子:106
专家分:0
注 册:2007-3-20
收藏
得分:0 
Option Explicit 语句
用了这个后好象.所有的变量都必须定义..不然就要报错..
2007-05-15 13:47
hyhhd
Rank: 2
等 级:论坛游民
威 望:1
帖 子:502
专家分:44
注 册:2006-5-12
收藏
得分:0 

要的就是报错。比如没有声明一个变量,在调试时不容易发现问题。我个人认为使用Option Explicit 语句,使程序更容易调试,而且声明一个变量后,程序将会提前分配一个内存地址,这有助于运行速度的提高。


2007-05-15 18:26
快速回复:[求助] 求一个算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022468 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved