Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

Gary 發問時間: 電腦與網際網路程式設計 · 7 年前

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 個已更新項目:

謝謝你的幫忙

2 個解答

評分
  • 意憚
    Lv 7
    7 年前
    最佳解答

    語法有問題

    你有兩個 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

  • wei
    Lv 6
    7 年前

    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

還有問題?馬上發問,尋求解答。