输出输入的所有因子
Output all the factors of the input
我正在尝试输出将输入均分的每个数字(因此没有余数)。
例如:如果输入60,那么输出应该是:
1、2、3、4、5、6、10、12、15、20、30、60
在这个例子中,我编写了输出 10 的代码:50 / 5。但我不知道如何修改它,以便我得到每个因数。我将不胜感激!
IN
STO DIVID
IN
STO DIVIS
LOOP1 LDA count
ADD one
STO count
LDA DIVID
SUB DIVIS
STO DIVID
OUT DIVID
BRP LOOP1
HLT
DIVID DAT 000
DIVIS DAT 000
one DAT 001
count DAT 000
您需要一个额外的外部循环来管理 DIVIS 的值,将其从 1 增加到 DIVID。
这是在可运行代码段中的样子:
#input:60
LDA ONE
STO divisor
IN
BRZ invalid
STO dividend
next LDA dividend
loop BRZ output
STO remainder
LDA remainder
SUB divisor
BRP loop
BRA inc
output LDA divisor
OUT
inc LDA divisor
SUB dividend
BRP done
LDA divisor
ADD ONE
STO divisor
BRA next
invalid OUT ; zero
done HLT
ONE DAT 1 ; constant
divisor DAT
dividend DAT
remainder DAT
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.74/lmc.js"></script>
如果输入为 0,此程序会将其视为“无效”并输出 0 并停止。
这是一个非常基本的算法,并未针对效率进行优化。可以进行一些优化,这会使代码更长。例如,每个数字都有除数 1,因此您可以立即输出它,并以除数 = 2 而不是 1 开始主循环。同样,一旦除数大于被除数的一半,您可以退出循环并输出股息本身,因为在 dividend/2 和股息之间没有其他除数。
通过实施 long division 算法可以提高效率。
我正在尝试输出将输入均分的每个数字(因此没有余数)。
例如:如果输入60,那么输出应该是:
1、2、3、4、5、6、10、12、15、20、30、60
在这个例子中,我编写了输出 10 的代码:50 / 5。但我不知道如何修改它,以便我得到每个因数。我将不胜感激!
IN
STO DIVID
IN
STO DIVIS
LOOP1 LDA count
ADD one
STO count
LDA DIVID
SUB DIVIS
STO DIVID
OUT DIVID
BRP LOOP1
HLT
DIVID DAT 000
DIVIS DAT 000
one DAT 001
count DAT 000
您需要一个额外的外部循环来管理 DIVIS 的值,将其从 1 增加到 DIVID。
这是在可运行代码段中的样子:
#input:60
LDA ONE
STO divisor
IN
BRZ invalid
STO dividend
next LDA dividend
loop BRZ output
STO remainder
LDA remainder
SUB divisor
BRP loop
BRA inc
output LDA divisor
OUT
inc LDA divisor
SUB dividend
BRP done
LDA divisor
ADD ONE
STO divisor
BRA next
invalid OUT ; zero
done HLT
ONE DAT 1 ; constant
divisor DAT
dividend DAT
remainder DAT
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.74/lmc.js"></script>
如果输入为 0,此程序会将其视为“无效”并输出 0 并停止。
这是一个非常基本的算法,并未针对效率进行优化。可以进行一些优化,这会使代码更长。例如,每个数字都有除数 1,因此您可以立即输出它,并以除数 = 2 而不是 1 开始主循环。同样,一旦除数大于被除数的一半,您可以退出循环并输出股息本身,因为在 dividend/2 和股息之间没有其他除数。
通过实施 long division 算法可以提高效率。