Re: [VB2005][心得] 關於1-1000的質數
首先 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)
推
09/28 00:58, , 1F
09/28 00:58, 1F
推
09/28 01:00, , 2F
09/28 01:00, 2F
推
09/29 14:00, , 3F
09/29 14:00, 3F
討論串 (同標題文章)
Visual_Basic 近期熱門文章
PTT數位生活區 即時熱門文章