Eratosthenes筛法的粗糙汇编源代码

本文介绍了Eratosthenes筛法的一种粗糙汇编源代码实现,虽然利用了空间换时间的思想,但由于涉及除法和内嵌循环,导致运行速度不佳。作者欢迎读者提出改进方案,以提升算法效率,适用于黑盒过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 典型的以空间换时间算法,由于用了除法和内嵌循环,速度非常不理想,哪位改进下,方便做成黑盒过程,呵呵。

 

;程序的描述:Eratosthenes筛法,筛选指定范围内的素数。
;作者:落叶树
;创建日期:
15:24 2007-8-6
;版本:
INCLUDE Irvine32.inc

.data
    count
=65000   ;指定范围,1-65000内的素数。
    array    dword count dup (
0)
.code
main PROC
    mov ecx,count
    mov esi,
1        ;从1开始生成数组
    mov ebx,
0
    L1:
    mov array[ebx],esi
    inc esi
    add ebx,
4
    loop L1          ;生成1-count的数组完毕。

    mov ecx,count
    mov esi,
0
    L2:
    push ecx         
    cmp array[esi],
1  ;用1作为标记,是1跳过。
    je L2end
    mov edi,esi
    L3:
    mov edx,
0
    mov eax,array[edi
+4]
    div array[esi]
    .
if edx==0
        mov array[edi
+4],1   ;能被除本身外素数整除的用1作为标记
    .endif
    add edi,
4
    loop L3

    L2end:
    pop ecx
    add esi,
4
    Loop L2            ;L2循环完成筛选。

    mov ecx,count
    mov esi,
0
    L5:
    cmp array[esi],
1
    je L5end
    mov eax,array[esi]
    call WriteDec
    mov al,
' '
    call WriteChar
    L5end:
    add esi,
4
    loop L5            ;显示数组里的素数。


    call Crlf
    exit
main ENDP
;其他子程序

END main

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值