欢迎来到天天文库
浏览记录
ID:38136845
大小:28.50 KB
页数:4页
时间:2019-05-28
《vb求素数程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、需要在窗体放置4个控件,不用设置控件任何属性:Command1,Command2,List1,Label1DimctExitAsBoolean,ctStopAsBooleanDimctCiFindAsLong,ctCiAddAsLongPrivateSubForm_Load() Me.Caption="查找N以内的所有素数" Label1.Caption=Me.Caption:Label1.AutoSize=True Command1.Caption="查找":Command2.Caption="取消"EndSubPrivateSubForm_Resize() DimSAs
2、Long OnErrorResumeNext S=Me.TextWidth("A") Command1.MoveS,S,S*8,S*3 Command2.MoveS*10,S,S*8,S*3 Label1.MoveS,Me.ScaleHeight-S*4,Label1.Width,S*4 List1.Move0,S*5,Me.ScaleWidth,Label1.Top-S*5EndSubPrivateSubForm_Unload(CancelAsInteger) ctExit=True:ctStop=True'保证在查找未结束时能顺利结束程序EndSubPrivateSub
3、Command2_Click() ctStop=True'取消查找EndSubPrivateSubCommand1_Click() StaticNAsLong DimSu()AsLong,SAsLong,GenAsLong,IAsLong,JAsLong DimnStrAsString,TAsSingle,CiAsLong '查找N以内的所有素数,存入数组Su(),素数的总个数为S IfN<2ThenN=10000 nStr=InputBox("请输入一个大于1的整数:","查找素数",N) IfnStr=""ThenExitSub N=Val(nStr) S
4、=0:ReDimSu(1) IfN>1thenS=1:Su(1)=2'■■根据冰麟轻武的建议,添加了本行 ctStop=False:Command1.Enabled=False List1.Clear:Label1.Caption="正在查找"&N&"以内的素数..." DoEvents T=Timer IfctCiFind<10000ThenctCiFind=10000 'ForI=2ToN ForI=3ToNStep2'■■根据冰麟轻武的建议,将上一行语句改成了本行 Gen=Sqr(I) '记忆I的平方根 ForJ=1ToS '
5、进度显示 Ci=Ci+1 IfCi>ctCiFindThen Ci=0:DoEvents IfctStopThenGoToShow1 Label1.Caption=N&"以内的素数:"&S&"个,"&Format(I/N*100,"0.0")&"%" EndIf '用I除以已经找到的素数■■交换下面两行代码,似乎能减少一次Mod运算 IfIModSu(J)=0ThenGoToNextI'能整除,不是素数,检查下一个 IfSu(J)>GenThenE
6、xitFor '检测到大于I的平方根就不用查了。删除此语句,结果一样,但速度慢得多 Next S=S+1:ReDimPreserveSu(S):Su(S)=INextI: Next I=N '将找到的素数显示到列表框中Show1: IfctExitThenExitSub T=Timer-T Ci=I/T*0.3'调整为查找过程中每0.3秒刷新一次进度 IfctCiFind7、ption="添加到到文本框0%" ctStop=False IfS>65535ThenI=65534ElseI=S List1.Visible=False IfctCiAdd<1000ThenctCiAdd=1000 T=Timer Ci=0 ForJ=1ToI List1.AddItemSu(J) Ci=Ci+1 IfCi>ctCiAddThen Ci=0:Do
7、ption="添加到到文本框0%" ctStop=False IfS>65535ThenI=65534ElseI=S List1.Visible=False IfctCiAdd<1000ThenctCiAdd=1000 T=Timer Ci=0 ForJ=1ToI List1.AddItemSu(J) Ci=Ci+1 IfCi>ctCiAddThen Ci=0:Do
此文档下载收益归作者所有