В чем ошибка в следующей программе в 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 ответа

Следуйте логике:

  1. Вы вводите номер, a,
  2. Программа создает b как 1,
  3. Программа сразу добавляет 1 в b, чтобы b сейчас 2,
  4. Программа устанавливает k в a/b, Это означает, что k сейчас половина a,
  5. Программа устанавливает p в k без.5, который может или не может быть там.
  6. Если p (половина от a округляется вниз) равно k (половина от a не округляется), то есть если a делится на bидет до 100 и говорит it is not a prime number,
  7. В противном случае, если b (который 2) меньше чем a программа переходит к строке 30 и добавляет еще 1 в b и повторяет процесс, но сейчас b является 3,
  8. В противном случае, если b (который 2) равно a или больше, чем это, он печатает, что это простое число.

Допустим, что число, которое вы вводите, равно 2. На самом деле два - это простое число. Следуйте логике выше, однако, и вы увидите, что программа скажет нам, что это не простое число, потому что на шаге 6 два, разделенные на два, равны единице, а один усеченный - все равно единице. То же самое должно быть верно для любого числа, кроме 1, потому что все числа делятся сами по себе.

Я предполагаю, что в вашем тестировании вы никогда не тестировали 1; программа должна сказать, что 1 - простое число (это потому, что, хотя 1 делится само по себе, вы начинаете с b = 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
Другие вопросы по тегам