【问题标题】:What is the error in following program in GW BASIC?GW BASIC 中的以下程序有什么错误?
【发布时间】:2023-03-08 13:25:01
【问题描述】:

我正在编写一个程序,它可以判断给定数字是否为质数。无论我输入质数还是其他数字,它总是显示“它不是质数”。有什么问题吗?

10    input "what is the number";a    
20    let b=1    
30    let b=b+1    
40    let k=a/b    
50    let p=fix(k)    
60    if p=k then goto 100    
70    if b<a then goto 30    
80    print "it is a prime number"    
90    goto 110    
100    print "it is not a prime number"    
110    end    
run

【问题讨论】:

    标签: basic gw-basic


    【解决方案1】:

    遵循逻辑:

    1. 您输入一个数字,a
    2. 程序将b创建为1
    3. 程序立即将1 添加到b,因此b 现在是2
    4. 程序将k 设置为a/b。这意味着k 现在是a 的一半。
    5. 程序将p 设置为k,而没有可能存在也可能不存在的.5。
    6. 如果pa 的一半向下舍入)等于ka 的一半未向下舍入),也就是说,如果a 可以被b 整除,则它变为100 并说it is not a prime number
    7. 否则,如果b(即2)小于a,程序会转到第30行并在b中添加另一个1并重复该过程,但现在b是@ 987654347@.
    8. 否则,如果b(即2)等于或大于a,则打印出这是一个素数。

    假设您输入的数字是 2。实际上,二是质数。但是,按照上面的逻辑,您会看到程序会告诉我们它不是质数,因为在第 6 步,二除以二是一,而截断的一仍然是一。除了 1 之外的任何数字都应该如此,因为所有数字都可以被自己整除。

    我的猜测是,在您的测试中,您从未测试过 1;程序应该说 1 是一个素数(这是因为即使 1 可以被自己整除,但你从 b=2 开始)。

    (另请注意,这在技术上也是错误的:1 不是质数。)

    【讨论】:

      【解决方案2】:

      这段代码描述了在基本中确定素数:

      10 INPUT p
      20 FOR l = 2 TO INT(SQR(p))
      30 LET a = p / l
      40 LET b = FIX(a)
      50 IF a = b THEN GOTO 80
      60 NEXT l
      70 PRINT "prime"
      80 END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-22
        相关资源
        最近更新 更多