GW BASIC中以下程序的错误是什么?

时间:2017-03-27 12:56:10

标签: basic gw-basic

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

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

2 个答案:

答案 0 :(得分:4)

遵循逻辑:

  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. 否则,如果b2)小于a,则程序转到第30行并将另一个1添加到b并重复这个过程,但现在b3
  8. 否则,如果b2)等于a或大于lst,则会打印出这是一个素数。
  9. 假设您输入的数字是2.实际上,两个是素数。但是,按照上面的逻辑,您将看到程序将告诉我们它不是素数,因为在步骤6中,两个除以2是一个,一个截断仍然是一个。对于除1以外的任何数字都应该如此,因为所有数字本身都可以被整除。

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

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

答案 1 :(得分:1)

此代码描述了确定基本的素数:

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