vb求素数程序
VB常用算法

常用算法1.判断素数素数是指只能被1与自己整除的数是素数,最小的素数是2,如3,5,7等都是素数判断方法一:Private Function Prime(N As Integer)As BooleanDim i As IntegerFor i=2 To N-1(或sqr(N)或N\2)If N Mod i=0 Then Exit ForNext i (或N/i=Int(N/i))If i=N Then Prime=TrueEnd Function判断方法二:Private Function Prime(N As Integer)As BooleanDim i As IntegerFor i=2 To N-1If N Mod i=0 Then Exit FunctionNext iPrime=TrueEnd Function(2)求最大公约数(欧几里德算法,辗转相除法)最大公约数是指两个数最大的公约数Private Function Gcd(byval m As Integer,ByVal n As Integer)As Integer Dim r As Integerr=m Mod nDo while r<>0m=nn=rr=m Mod nLoopGcd=nEnd Function利用递归实现判断最大公约数Private Function Gcd(ByVal m As Integer,ByVal n As Integer)As IntegerDim r As Integerr=m Mod nIf r=0 ThenGcd=nELseM=nn=rGcd=Gcd(m,n)End IfEnd Function(3)求因子算法与求完全数算法Private Sub factor(x As Integer,fn()As Integer)'动态数组fn用以存放所有的因子Dim i As Integer,n As IntegerFor i=1 To XIf x Mod i=0 Thenn=n+1Redim Preserve fn(n)fn(n)=iEnd IfNext iEnd Sub求完全数:完全数:整数N的因子和(其中因子包括1,不包括自身)等于NPrirate Function wanshu(N As Integer)As Boolean 'N为原数,sum为N的因子之和Dim i As Integer,sum As IntegerFor i=1 To N-1If N Mod i=0 Thensum=sum+iEnd IfNext iIf sum=N Then wanshu=TrueEnd Function(4)进制转换N进制--十进制如二进制转换为十进制采用从右向左每个数乘以其对应的幂值,如二进制10111=1×2^0+1×2^1+1×2^2+0×2^3+1×2^4=23,八进制转换为十进制采用从右向左每个数乘以其对应的幂值,如八进制25=5×8^0+2×8^1=21,十六进制转换为十进制采用从右向左每个数乘以其对应的幂值, 如十六进制A7=7×16^0+10×16^1=167(十六进制的范围是从0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个数,其中A表示10,B表示11,依次类推,F表示15)private sub zh1(a as string, N as integer,b as integer)'a为N进制数,b为转换后的十进制数,N 代表某种进制dim p as integer,i as integer,s1 as stringp=0for i=Len(a) to 1 step -1s1=Ucase(Mid(a,i,1))if s1>="A" And s1<="F" Then s1=Asc(s1)-55b=b+val(s1)*N^pp=p+1Next IEnd Sub十进制---- N进制:方法是除N逆序取余法,注意逆序如将十进制188转换为十六进制的方法是,除以16逆序取余法, 所以是274余数188/8 4(余数)23/8 7(余数)2/8 2(余数)Private Sub zh(a as integer,N as integer,b as integer)‘a为十进制数,b为转换后的N进制数,N代表某种进制dim r as integer, s as stringdo until a=0r=a mod n ‘r取余if r>9 then s=Chr(55+r) else s=Cstr(r)b=s & ba=a\NLoopEnd Sub(5)互质数:两个数的最大公约数为1Private Function reprime(a as integer, b as integer) as boolean dim i as integerfor i=2 to aif a mod i=0 and b mod i=0 then exit functionnext ireprime=trueEnd Function(6)回文数:左右对称的数为回文数(如121,13231)方法一:折半判断法Private Function compare(n as long) as booleanDim I as integer, s as string , slen as integers=Cstr(n): slen=Len(s)For i=1 to slen\2if mid(s,I,1)<>Mid(s,slen-i+1,1) Then Exit Function nextcompare=trueEnd Function方法二:根据定义:其逆序数(反序数)和原数相等的数为回文数Private Function compare(n as integer) as Booleandim I as integer, s1 as string,s2 as strings1=cstr(n)For i=1 to len(s1)s2=Mid(s1,I,1) & s2Next Iif s2=s1 then compare=trueEnd Function(7)最小公倍数方法一:最小公倍数=两数乘积/最大公约数private Function gcd(byval m as integer, byval n as integer) as integerdim r as integerdor=m mod nm=nn=rloop until r=0gcd=mFunctionprivate Function lcm(x as integer,y as integer) as integerlcm=(x*y/gcd(x,y))End Function方法二:穷举法,利用计算机运算速度快不易出错的特点,将所有的可能性一一尝试,直到得出结果private Function lcm(x as integer, y as integer) as integerdim i as longfor i=1 to x*yif I mod x=0 and I mod y=0 thenlcm=IExit ForEnd Ifnext IEnd Function(8)判断最大数、最小数Private Sub value(a() as integer, max as integer,min as integer)dim i as integermax=a(1) : min=a(1)for i=2 to ubound(a)if a(i)>max then max=a(i)if a(i)<min then min=a(i)next iEnd Sub(9)阶乘方法一: 方法二:利用递归方式private Function Fact(byval N as integer) as Long private Function fact(n as integer) as longFact=1 if n=1 or n=0 thendo while N>0 fact=1fact=fact*N elseN=n-1 fact=n*fact(n-1) loop end ifEnd Function End Function(10)裴波拉挈数列(递推算法)Fab(n)=fab(n-1)+fab(n-2)private Function Fab(n as integer) as integerif n=1 or n=2 thenfab=1elseFab=Fab(n-1)+fab(n-2) ‘函数名=表达式End ifEnd Function(11)排序—从小到大方法一:使用选择排序法private sub sort(a() as integer)dim I as integer, j as integerdim n as integer, t as integern=Ubond(a)for i=1 to n-1for j=i+1 to nif a(i)>a(j) thent=a(i) : a(i)=a(j): a(j)=tend ifnext jnext iEnd Sub方法二:冒泡排序法private sub sort2(a() as integer)dim I as integer,j as integerdim n as integer, t as integern=ubound(a)for i=1 to n-1for j=1 to n-iif a(j)>a(j+1) thent=a(j): a(j)=a(j+1): a(j+1)=tEnd IfNext jNext IEnd Sub(12)分解质因子:如:120=2*2*2*3*5private sub zhiyinzi(n as integer, a() as integer)dim k as integer, i as integeri=2doif n mod i=0 thenk=k+1 : Redim Preserve a(k) : a(k)=i: n=n\i elsei=i+1End Ifloop until n=1End Sub(13)各位数分离Private Sub command1_click() dim i as integer,j as integer i=inputbox("请输入数值") do while i<>0j=i mod 10print ji=i\10loopEnd Sub。
vb求素数程序

需要在窗体放置4个控件,不用设置控件任何属性:Command1,Command2,List1,Label1Dim ctExit As Boolean, ctStop As BooleanDim ctCiFind As Long, ctCiAdd As LongPrivate Sub Form_Load()Me.Caption = "查找 N 以内的所有素数"Label1.Caption = Me.Caption: Label1.AutoSize = TrueCommand1.Caption = "查找": Command2.Caption = "取消"End SubPrivate Sub Form_Resize()Dim S As LongOn Error Resume NextS = Me.TextWidth("A")Command1.Move S, S, S * 8, S * 3Command2.Move S * 10, S, S * 8, S * 3Label1.Move S, Me.ScaleHeight - S * 4, Label1.Width, S * 4List1.Move 0, S * 5, Me.ScaleWidth, Label1.Top - S * 5End SubPrivate Sub Form_Unload(Cancel As Integer)ctExit = True: ctStop = True '保证在查找未结束时能顺利结束程序End SubPrivate Sub Command2_Click()ctStop = True '取消查找End SubPrivate Sub Command1_Click()Static N As LongDim Su() As Long, S As Long, Gen As Long, I As Long, J As LongDim nStr As String, T As Single, Ci As Long'查找 N 以内的所有素数,存入数组 Su(),素数的总个数为 SIf N < 2 Then N = 10000nStr = InputBox("请输入一个大于 1 的整数:", "查找素数", N)If nStr = "" Then Exit SubN = Val(nStr)S = 0: ReDim Su(1)If N > 1 then S = 1: Su(1)=2 '■■根据冰麟轻武的建议,添加了本行ctStop = False: Command1.Enabled = FalseList1.Clear: Label1.Caption = "正在查找 " & N & " 以内的素数 ..."DoEventsT = TimerIf ctCiFind < 10000 Then ctCiFind = 10000'For I = 2 To NFor I = 3 To N Step 2 '■■根据冰麟轻武的建议,将上一行语句改成了本行Gen = Sqr(I) '记忆 I 的平方根For J = 1 To S'进度显示Ci = Ci + 1If Ci > ctCiFind ThenCi = 0: DoEventsIf ctStop Then GoTo Show1Label1.Caption = N & " 以内的素数:" & S & " 个," & Format(I / N * 100, "0.0") & "%"End If'用 I 除以已经找到的素数■■交换下面两行代码,似乎能减少一次Mod 运算If I Mod Su(J) = 0 Then GoTo NextI '能整除,不是素数,检查下一个If Su(J) > Gen Then Exit For '检测到大于 I 的平方根就不用查了。
VB程序设计-素数判断

VB程序设计-素数判断(布局)(运行界面1)(运行界面2)(运行界面3)以下为实测运行通过源代码:Private Sub CommandButton1_Click()Rem 素数判断,算法一Dim n, m As IntegerDim k As Integerm = 0n = Val(Text1.Text) '目标数字If n <= 1 ThenMsgBox "请输入大于1的整数!", vbOKOnly + vbExclamation, "输入错误"Text1.SetFocusText1.Text = "2"Exit SubEnd IfRem 以下是素数判断的算法,适合单个素数的判断For k = 2 To Int(Sqr(n))If n Mod k = 0 Thenm = 1 '标记End IfNext kIf m = 1 ThenText2.Text = n & "不是素数"ElseText2.Text = n & "是素数"End IfEnd SubPrivate Sub CommandButton2_Click()Rem 清空Text1.Text = ""Text2.Text = ""End SubPrivate Sub Commandbutton3_Click()Rem 素数判断,算法二Dim n, k As Integern = Val(Text1.Text)If n <= 1 ThenMsgBox "请输入大于1的整数!", vbOKOnly + vbExclamation, "输入错误"Text1.SetFocusText1.Text = ""Exit SubEnd IfRem 以下是素数判断的算法,也是常用算法,实用性强For k = 2 To Int(Sqr(n))If n Mod k = 0 ThenExit For '可减少不必要的循环End IfNext kIf k > Int(Sqr(n)) ThenText2.Text = n & "是素数" 'k=int(sqr(n))+1ElseText2.Text = n & "不是素数"End IfEnd SubPrivate Sub userForm_Load()Rem 初始化With Label1.FontName = "隶书".FontSize = 30.FontBold = True.ForeColor = vbRedEnd WithLabel1.Caption = "素数判断"Text1.Text = 2Text1.ForeColor = &H80FF&Text2.ForeColor = &H80FF&End SubPrivate Sub Text1_Change()Rem text1的change事件Text2.Text = "请单击判断按钮"End Sub显示窗体按钮代码:Private Sub CommandButton1_Click() UserForm.ShowEnd Sub。
vb常用程序代码

1、求半径为r的圆的面积,要求用户从键盘输入半r。
程序代码:Private Sub Form_click()Const PI = 3.14Dim r%Dim s!r = InputBox("请输入半径r的值:", "求圆的面积") s = PI * r * rForm1.FontSize = 16Print "半径是" + Str(r) + "的圆的面积是" + Str(s) End Sub2、输入三个整数,从小到大顺序输出。
程序代码:Private Sub Form_click()a = InputBox("a")b = InputBox("b")c = InputBox("c")Print "排序前:"; a, b, cIf a > b Then t = a: a = b: b = tIf a > c Then t = a: a = c: c = tIf b > c Then t = b: b = c: c = tPrint "排序后:"; a, b, cEnd Sub3、输入三个整数,从大到小顺序输出。
程序代码:Private Sub Form_click()a = InputBox("a")b = InputBox("b")c = InputBox("c")Print "排序前:"; a, b, cIf a <b Then t = a: a = b: b = tIf a < c Then t = a: a = c: c = tIf b < c Then t = b: b = c: c = tPrint "排序后:"; a, b, cEnd Sub4、输入x的值,输出对应的值。
浙江省中职学校计算机单招单考VB算法素数

四、素数
练习:输出10~100能被7整除的数,且每行输出5个。
四、素数
素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整除的数。
判别某数M是否是素数的经典算法是:对于M,从I=2,3,4……,M-1依次判别能否被I整除,只要有一个能整除,M就不是素数,否则M是素数。
例1.编写命令按钮单击事件,从键盘输入一个整数,判断它是否是素数。
例2.编写命令按钮单击事件,输出3~500之间所有素数,并求和。
例3.编写命令按钮单击事件,随机产生20个10~200的随机整数,并输出其中的所有素数,每行5个,并输出共有多少个。
练习1:编写命令按钮单击事件,输出200~400之间所有素数。
练习2:编写命令按钮单击事件,输入40个100~200的整数,输出其中的所有素数及个数。
VB程序

1,编程输入10名短跑运动员的姓名及其100米跑成绩,输出最好成绩的运动员姓名及其成绩,再显示低于平均成绩的所有运动员姓名及其成绩。
Private Sub Form_click()Dim a(10) As String, b(10) As SingleDim I As Integer, avg As Single, max As Single, first As StringFor I = 1 To 10a(I) = InputBox("请输入第" & I & "名运动员的姓名:")b(I) = InputBox("请输入第" & I & "名运动员的成绩:")Print "第" & I & "号选手" & a(I) & "的成绩为:" & b(I)Next Ifirst = a(1)max = b(1)PrintFor I = 2 To 10If b(I) > max Thenmax = b(I)first = a(I)End IfNext IPrint "成绩最好的运动员是" & first & ",成绩为:"; maxPrintFor I = 1 To 10s = s + b(I)Next Iavg = s / 10Print "所有运动员的平均成绩为:" & avgPrintFor I = 1 To 10If b(I) < avg ThenPrint a(I) & "运动员的成绩低于平均成绩,他的成绩为:" & b(I)End IfNext IEnd Sub2、素数(质数)是一个正整数,除了1和它本身之外,不能被其它任何正整数整除。
vb程序改错和程序设计

【程序改错】'题目:该程序的功能是求出100到200之间的全部素数,并且按每行4个、每个数据之间有10个空格的格式输出。
'注意:不可增加或删除程序行,也不可以更改程序结构' Private Sub Form_Click()dim k as integer,i as integer,j as integerk = 0For i = 100 To 200'**********FOUND**********For j = 1 To i - 1If i Mod j = 0 Then Exit ForNext jIf j = i Then'**********FOUND**********Print i; Tab(10);k = k + 1'**********FOUND**********If k Mod 5 = 0 Then Print;End IfNext iEnd Sub答案:1). For j = 2 To i - 1 或For j = 2 To -1 + i2). Print i; Space(10);3). If k Mod 4 = 0 Then Print━━━━━━━━━━━━━━━━'【程序设计】' '题目:(事件)单击窗体。
(响应)求100以内偶数的和,并将结果输出在窗体上。
将结果存入变量SUM中答案:26__________________________________Dim i As IntegerFor i = 1 To 100If i Mod 2 = 0 Thensum = sum + iEnd IfNextPrint sum'【程序改错】'------------------------------------------------'题目:在下面的程序段中过程pd可以判断任意三个数能' 否构成三角形的三边,利用该过程的判定结果,对能构成三角形的计算其面积,构不成的显示"不能构成三角形Option ExplicitPrivate Sub Form_Click()'**********FOUND**********Dim x%, y%, z%, s%, b As Boolean,h as Singlex = InputBox("请输入三角形的边长")y = InputBox("请输入三角形的边长")z = InputBox("请输入三角形的边长")= InputBox("请输入三角形的边长")b = pd(x, y, z)h = (x + y + z) / 2'**********FOUND**********If not b Thens = Sqr(h * (h - x) * (h - y) * (h - z))Print "三角形面积是"; sElsePrint "不能构成三角形"End IfEnd Sub'**********FOUND**********Public Function pd( ) As BooleanIf x > 0 And y > 0 And z > 0 And x + y > 0 And x + z > y And y + z > x Thenpd = TrueElsepd = FalseEnd IfEnd Function答案:1). Dim ★x%★, ★y%★,★z%★, ★s!★, ★b★As Boolean★, ★h As Single2). If b Then3). Public Function pd(x%, y%, z%) As Boolean━━━━━━━━━━━━━━━━三、程序设计共1题(共计15分)'题目:(事件)双击窗体。
vb程序设计模板 精心整理 很多程序设计都可以套此模板

Next j
Picture1.Print
Next i
End Sub
Private Sub Command2_Click()
Dim sign(4, 5) As String * 1, i As Integer, j As Integer
Dim av As Single
Private Sub Command3_Click()
Picture1.Cls
Text1.Text = ""
End Sub
Private Sub Command4_Click()
End
End Sub
Vb程序结构控制(四)
这个是生成数组并求最大数所在行和列
List1.AddItem "本区间无幻影数"
End If
End Sub
Private Function prime(x As Integer) As Boolean
Dim i As Integer
For i = 2 To x
If x Mod i = 0 Then Exit For
Exit For
End If
Next i
If i = n Then
Label2.Caption = Str(n) + " 是一个素数"
Else
Label2.Caption = Str(n) + " 不是一个素数"
End Function
文件
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
需要在窗体放置4个控件,不用设置控件任何属性:Command1,Command2,List1,Label1Dim ctExit As Boolean, ctStop As BooleanDim ctCiFind As Long, ctCiAdd As LongPrivate Sub Form_Load()Me.Caption = "查找 N 以内的所有素数"Label1.Caption = Me.Caption: Label1.AutoSize = TrueCommand1.Caption = "查找": Command2.Caption = "取消"End SubPrivate Sub Form_Resize()Dim S As LongOn Error Resume NextS = Me.TextWidth("A")Command1.Move S, S, S * 8, S * 3Command2.Move S * 10, S, S * 8, S * 3Label1.Move S, Me.ScaleHeight - S * 4, Label1.Width, S * 4List1.Move 0, S * 5, Me.ScaleWidth, Label1.Top - S * 5End SubPrivate Sub Form_Unload(Cancel As Integer)ctExit = True: ctStop = True '保证在查找未结束时能顺利结束程序End SubPrivate Sub Command2_Click()ctStop = True '取消查找End SubPrivate Sub Command1_Click()Static N As LongDim Su() As Long, S As Long, Gen As Long, I As Long, J As LongDim nStr As String, T As Single, Ci As Long'查找 N 以内的所有素数,存入数组 Su(),素数的总个数为 SIf N < 2 Then N = 10000nStr = InputBox("请输入一个大于 1 的整数:", "查找素数", N)If nStr = "" Then Exit SubN = Val(nStr)S = 0: ReDim Su(1)If N > 1 then S = 1: Su(1)=2 '■■根据冰麟轻武的建议,添加了本行ctStop = False: Command1.Enabled = FalseList1.Clear: Label1.Caption = "正在查找 " & N & " 以内的素数 ..."DoEventsT = TimerIf ctCiFind < 10000 Then ctCiFind = 10000'For I = 2 To NFor I = 3 To N Step 2 '■■根据冰麟轻武的建议,将上一行语句改成了本行Gen = Sqr(I) '记忆 I 的平方根For J = 1 To S'进度显示Ci = Ci + 1If Ci > ctCiFind ThenCi = 0: DoEventsIf ctStop Then GoTo Show1Label1.Caption = N & " 以内的素数:" & S & " 个," & Format(I / N * 100, "0.0") & "%"End If'用 I 除以已经找到的素数■■交换下面两行代码,似乎能减少一次Mod 运算If I Mod Su(J) = 0 Then GoTo NextI '能整除,不是素数,检查下一个If Su(J) > Gen Then Exit For '检测到大于 I 的平方根就不用查了。
删除此语句,结果一样,但速度慢得多NextS = S + 1: ReDim Preserve Su(S): Su(S) = INextI:NextI = N'将找到的素数显示到列表框中Show1:If ctExit Then Exit SubT = Timer - TCi = I / T * 0.3 '调整为查找过程中每 0.3 秒刷新一次进度If ctCiFind < Ci Then ctCiFind = CinStr = I & " 以内的素数共 " & S & " 个" & vbCrLf & "查找用时 " & Format(T, "0.00") & " 秒"Label1.Caption = "添加到到文本框 0%"ctStop = FalseIf S > 65535 Then I = 65534 Else I = SList1.Visible = FalseIf ctCiAdd < 1000 Then ctCiAdd = 1000T = TimerCi = 0For J = 1 To IList1.AddItem Su(J)Ci = Ci + 1If Ci > ctCiAdd ThenCi = 0: DoEventsIf ctStop Then Exit ForLabel1.Caption = "添加到到列表框 " & Format(J / S * 100, "0.0") & "%"End IfNextT = Timer - TCi = J / T * 0.3 '调整为添加过程中每 0.3 秒刷新一次进度If ctCiAdd < Ci Then ctCiAdd = CiIf List1.ListCount < S Then List1.AddItem "显示 " & J & "/" & S & " 个"Label1.Caption = nStrList1.Visible = TrueCommand1.Enabled = TrueEnd SubPrivate Sub Form_Load()Me.Caption = "雪花飘飘"Me.BackColor = RGB(100, 100, 255)Label1(0).AutoSize = True: Label1(0).BackStyle = 0Label1(0).Caption = "*": Label1(0).ForeColor = &HFFFFFFRandomizeFor I = 0 To 40If I > 0 Then Load Label1(I): Label1(I).Visible = TrueLabel1(I).Move Me.ScaleWidth * Rnd, Me.ScaleHeight * RndLabel1(I).Tag = Rnd * 7 - 3 & "|" & Rnd * 5 + 1Label1(I).Font.Size = 5 + Rnd * 9NextLabel1(0).Font.Size = 9Timer1.Enabled = True: Timer1.Interval = 50End SubPrivate Sub Timer1_Timer()Dim I As Long, S As Long, T As Single, L As SingleDim nTag As String, X As Single, y As Single, W As SingleRandomizeW = Label1(0).Height * 0.05For I = 0 To Label1.Count - 1nTag = Label1(I).TagS = InStr(nTag, "|")X = Left(nTag, S - 1): y = Mid(nTag, S + 1)S = Int(Rnd * 10)If S = 0 Then X = Rnd * 11 - 5: Label1(I).Tag = X & "|" & yL = Label1(I).Left + X * W: T = Label1(I).Top + y * WIf L < -Label1(I).Width Then L = Me.ScaleWidthIf T < -Label1(I).Height Then T = Me.ScaleHeightIf L > Me.ScaleWidth Then L = -Label1(I).WidthIf T > Me.ScaleHeight ThenT = -Label1(I).HeightLabel1(I).Tag = Rnd * 11 - 5 & "|" & Rnd * 5 + 1End IfLabel1(I).Move L, TNextEnd Sub。