ЛКМ для поиска простых чисел по пользовательскому вводу

00: 599  
01: 298  
02: 738  
03: 598   
04: 297  
05: 395 
06: 730 
07: 825
08: 597 
09: 295
10: 717
11: 597
12: 196
13: 397
14: 592
15: 393
16: 600 
17: 598
18: 902
19: 598
20: 196 
21: 398
22: 594 
23: 397  
24: 600   
25: 593
26: 196 
27: 393 
28: 595  
29: 604  
30: 593  
31: 717
32: 598
33: 196 
34: 398
35: 594
36: 397
37: 600
38: 000  
91: 005  
92: 000   // DAT 000
93: 000   // Counter
94: 002   // DAT 002
96: 001   // DAT 001 - plus 1  
97: 002   // DAT 002 - dividor
98: 002   // DAT 001 - incrementor
99: 050   // DAT 10  - max

Привет, ребята,

У меня есть код, чтобы найти простые числа между 1-100, но я изо всех сил пытаюсь воссоздать это в программу, которая находит только те, которые находятся между вводом пользователя.

У меня был план вычесть одно число из другого, а затем разделить это число на 2, 3, 4 и 5.

Ребята, есть ли у вас какие-либо советы, как это сделать? Прошу прощения за отсутствие комментариев.

1 ответ

Отказ от ответственности: я не знаю, что делает ваш оригинальный код, так как я не очень хорошо читаю числовые коды. Следующее от primes.lmc, которое я написал сам.


Код (сильно комментируется):

# Prime number finder. Prints all prime numbers between the numbers the user inputs (min, then max).

# Min
        INP
        SUB ONE
        STA NUM

# Max
        INP
        STA MAX

# Main checking loop. Check each number from NUM to MAX.
TLOOP   LDA NUM

# Have we done all MAX numbers?
        SUB MAX
        BRZ HALT

# Increment to next number to check.
        LDA NUM
        ADD ONE
        STA NUM

# Reset divisor.
        LDA ONE
        STA DIV

# Check NUM for primeness by dividing all numbers from 2 to NUM - 1 into it.
DLOOP   LDA DIV

# Increment to next divisor.
        ADD ONE
        STA DIV

# Have we checked up to the number itself?
        LDA DIV
        SUB NUM
        BRZ PRIME

# Setup for divide function.
        LDA NUM

# Modulus function: accumulator % DIV.

MODULUS SUB DIV
        BRP MODULUS
        ADD DIV

# Remainder is now in the accumulator. If its zero, NUM is not prime.
        BRZ NPRIME
        BRA DLOOP

# If its prime, print it.
PRIME   LDA NUM
        OUT

# Go back to the top.
NPRIME  BRA TLOOP

# End of program.
HALT    HLT

NUM     DAT 1
DIV     DAT 1
ONE     DAT 1
MAX     DAT

Первый пользовательский ввод - минимум, второй - максимум (включительно).


Запуск (на призраке, с 13 до 23):

Бег

Другие вопросы по тегам