Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。
vb 質數問題
請問各位, 我想寫一個程式, 只要我輸入X就會自動把1 到X的所有質數找出來. 以下是我的程式, 哪裡有問題嗎?
Private Sub Form_Load()
x = InputBox("請輸入一個數")
For a = 2 To x Step 1
For b = 2 To x - 1 Step 1
If a Mod b <> 0 Then
Print a
End If
Next a
End Sub
那語法上的問題如何改進?
可以用inputbox而不使用command1_click嗎?
所以邏輯上應該如何改?
我爬過很多文了, 但還是找不到答案, 可以回答詳細一點嗎? 我可以給更多點數, 麻煩你
謝謝你的幫忙
2 個解答
- 意憚Lv 77 年前最佳解答
語法有問題
你有兩個 for 迴圈,可是卻只有一個 next
執行事件有問題
你用 print 輸出結果,可是這是 Form_Load
表單都還沒形成,你 print 根本出不來
你應該寫在按鈕事件裡面,比如 Command1_Click
邏輯有問題
質數代表 a 不能被任何數整除,1 跟自己除外
可是你的 b 是 2 to x-1
一整排的 b 只要有一個沒有整除你就當他是質數,這是不對的
比如:a=4 可以被 b=2 整除,接下來 a=4 不能被 b=3 整除
a=4 就會被你輸出當質數,這樣所有的數字都是質數了
還有你 b 的迴圈也包含 a ,也違反了質數規則
2014-01-25 01:50:51 補充:
語法問題
就是只要增加一個 next 就可以了
inputbox是函數,command1_click是事件,這兩者並不相關
函數可以寫在任何事件裡面,只是要考慮事件本身的觸發條件而已
因為你是print輸出,print輸出會直接輸出到form上
所以Form_Load並不適合
程式邏輯不見得要正面思考
以這例子而言,是需要反面思考才好寫
關於邏輯我之前已經寫得很清楚了
沒有東西可以寫了
2014-01-25 01:51:03 補充:
最後直接附上答案,雖然這是作業,我還是希望你好好想清楚
Private Sub Command1_Click()
x = InputBox("請輸入一個數")
For a = 2 To x
For b = 2 To a - 1
If a Mod b = 0 Then Exit For
Next
If b = a Then Print a
Next
End Sub
- weiLv 67 年前
x = InputBox("請輸入一個數")
if x >= 2 then print 2
If x mod 2 = 0 then x -= 1
For a = 3 To x Step 2
Dim IsPrime As Boolean = True
For b = 2 To Int(x^(1/2)) Step 1
If a Mod b = 0 Then IsPrime = False : exit for
Next b
If IsPrime = True Then Print a
Next a