В чем ошибка в следующей программе в 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 ответа
Следуйте логике:
- Вы вводите номер,
a
, - Программа создает
b
как1
, - Программа сразу добавляет
1
вb
, чтобыb
сейчас2
, - Программа устанавливает
k
вa/b
, Это означает, чтоk
сейчас половинаa
, - Программа устанавливает
p
вk
без.5, который может или не может быть там. - Если
p
(половина отa
округляется вниз) равноk
(половина отa
не округляется), то есть еслиa
делится наb
идет до 100 и говоритit is not a prime number
, - В противном случае, если
b
(который2
) меньше чемa
программа переходит к строке 30 и добавляет еще1
вb
и повторяет процесс, но сейчасb
является3
, - В противном случае, если
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