作者humanfly (laguna)
看板Visual_Basic
标题Re: [VB2005][心得] 关於1-1000的质数
时间Sat Sep 27 13:12:18 2008
首先 count部份也是错的,基本上你的逻辑就错了。
所以记得要写注解,不然有时我还很难看出你在想什麽 ? XD
: : ===程式段结束===
: : 其中,TextBox输入一个大於3的数,
: : 它就会在ListBox中列出1~输入数的所有质数。
: 先抱歉翻这麽旧的文出来发问
: 我做的方法是
: ===程式段开始===
: Module Module1
: Sub Main()
: Dim input, temp, n, k, s, x, count As Integer
: Dim array(100, 0)
如果你想宣告一维阵列 用dim array(100) 即可
这里可以看出 你应该是刚学VB吧?
但相信我 如果你是求 2-10000间的质数 一定不够放的
可以dim array(10000)
: s = 0
: count = 0
: Console.Write("请输入一个2~10000的整数 ")
: input = Console.ReadLine
: For temp = 2 To input
: k = 0
这里你只设n= 2 to 100 代表你也只能正确的求出 101内的正确质数
可以试着设 n= 2 to input-1
但这里不是错误的重点
: For n = 2 To 100
你这里把
temp mod n=0 这是指该数能被小於他的数整除 放入阵列里
逻辑就是错误的了
: If n < temp And temp Mod n = 0 Then
: k += 1
: array(s, 0) = temp
: s += 1
: End If
: Next
: If k = 1 Then
: count += 1
: End If
: Next
: Console.WriteLine("所包含的质数有")
: For x = 0 To s Step 1
: Console.WriteLine(x, 0)
这里印出的也不对
你要印出的应该是 console.writeline(array(x,0))
or console.writeline(array(x))
array中的值,而不是编号,所以你array不熟写这程式就麻烦了一点
虽然说不太用到阵列
你这边写对就可以知道你array输出的值都是些重覆且非质数的值
: Next
: Console.WriteLine("共" & count & "个")
: Console.ReadKey()
: End Sub
: End Module
: ====程式段结束===
: 须做出输入1~10000的数 得出所输入的数的所有质数 并计共有几个质数
: 绿字为计次部份
: 红字为求质数部份
: 我写的 计次部份没有问题
: 可是求质数部份 怎麽跑都不对
: 能某请大大们替我解答一下 哪里错了?
但你的观念只要改一改一小段 至少 100以内的质数是能求出来的
'程式开始 发亮为修改过
Module Module1
Sub Main()
Dim input, temp, n, k, s, x, count As Integer
Dim array(100, 0)
s = 0
count = 0
Console.Write("请输入一个2~10000的整数 ")
input = Console.ReadLine
For temp = 2 To input
k = 0
For n = 2 To 100
If n < temp And temp Mod n = 0 Then
k += 1
End If
Next
If k = 0 Then '确定不是质数 即放入阵列
array(s, 0) = temp
s += 1
count += 1
End If
Next
Console.WriteLine("所包含的质数有")
For x = 0 To s Step 1
Console.WriteLine(array(x, 0))
Next
Console.WriteLine("共" & count & "个")
Console.ReadKey()
End Sub
End Module
'程式结束
不用阵列的写法
Module Module1
Sub Main()
Dim x, y, input, checked, count As Integer
count = 0 ' 设定count初值
Console.Write("请输入一个2~10000的整数 ")
input = Console.ReadLine() '寻找质数范围终点
Console.WriteLine("从2~" & input & "中有以下质数:")
Dim sw As New Stopwatch '码表
sw.Start()
For x = 2 To input '对范围内每个数做质数检查
checked = 0 ' 预设checked为0 , 表示没被 大於1取小於该数的数整除
For y = 2 To x - 1 ' 土法链钢 对大於1且小於该数的整数做除法
If x Mod y = 0 Then
checked = 1 '如果能被整除 即checked=1 , 该数不为质数
Exit For
' 确定不是质数就可以闪了,这段也可注解掉,你看看时间有没有差XD
End If
Next
If checked = 0 Then '全部做完後 如果checked=0 ,该数为质数,输出
且 count + 1
Console.WriteLine("{0}", x)
count += 1
End If
Next
sw.Stop()
Console.WriteLine("耗时: " & sw.Elapsed.ToString)
Console.WriteLine("共" & count & "个") '输出count
Console.ReadLine()
End Sub
End Module
你想要追求效率可以改写成公式解求法
应该会快很多~慢慢研究呗。
※ 编辑: humanfly 来自: 122.117.128.13 (09/27 13:24)
※ 编辑: humanfly 来自: 122.117.128.13 (09/27 13:34)
※ 编辑: humanfly 来自: 122.117.128.13 (09/27 13:35)
1F:推 dk3208:可以再加一个小地方,超过欲判断数值的一半就可以EXIT回圈了 09/28 00:58
2F:推 dk3208:也就是内回圈只跑到x/2就可以了 09/28 01:00
3F:推 xtimer:因为我要列的是一个质数一行 所以必须要用到2维阵列 09/29 14:00