LMC通过用户输入查找素数

时间:2014-02-25 00:05:43

标签: little-man-computer

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 个答案:

答案 0 :(得分: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

第一个用户输入是最小值,第二个是最大值(包括)。


跑步(在specter上,从13到23):

Running