.model small
.data
table byte 3,12500 dup (0);;0和1不是质数
i word 0
j word 0 .stack 4096 .code
main proc far
start:
mov ax,@data
mov ds,ax
mov di,offset table
mov i,2
mov cx,350
s0:
mov ax,i
mov dx,0 ;dx:ax/bx=ax...dx mov bx,8
div bx
push cx
mov cx,dx ;余数 位移
mov si,ax ;商 偏移地址
mov dx,1
shl dl,cl ;移位
mov bx,di
test [bx][si],dl ;noprime[i]
jnz s0continue ;不是质数
pop cx push cx
mov ax,i
mov j,ax ;j=i;i*j<=10w;j++
s1:
mov ax,j
mul i
and dx,dx
jz setbit ;dx非零,若乘积大于等于65536,要跳过去特判,大于10w要跳出s1 ;dx>=1
cmp dx,1 ;等于1、大于1
ja s0continue ;dx大于1要continue s0.等于要特判ax是否满足
cmp ax,1000011010100000B
ja s0continue ;ax大于阈值,continue s0 setbit:
mov bx,8
div bx
mov cx,dx
mov si,ax
mov bx,di
mov dl,1
shl dl,cl
or [bx][si],dl
inc j
jmp s1
s0continue:
inc i
pop cx
loop s0 mov cx,65533
mov i,2
output:
mov dx,0
mov ax,i
mov bx,8
div bx mov si,ax
mov bx,di push cx
mov cl,dl
mov dl,1
shl dl,cl
test [bx][si],dl
jnz outputconti
mov dx,0
mov ax,i
call print16b_dec
outputconti:
pop cx
inc i
loop output mov cx,34464
mov i,0
output2:
mov dx,1
mov ax,i
mov bx,8
div bx mov si,ax
mov bx,di push cx
mov cl,dl
mov dl,1
shl dl,cl
test [bx][si],dl
jnz output2conti
mov dx,1
mov ax,i
call print16b_dec
output2conti:
pop cx
inc i
loop output2 mov ax,4c00h
int 21h
main endp print16b_dec proc near;用%d输出16bit,参数放在dx:ax,dx有0和1两种情况
mov bx,10000D ;dx:ax/bx=ax...dx
div bx
mov bx,dx ;余数
call print1dec
mov ax,bx
mov dx,0
mov bx,1000D
div bx
mov bx,dx
call print1dec
mov ax,bx
mov dx,0
mov bx,100D
div bx
mov bx,dx
call print1dec
mov ax,bx
mov dx,0
mov bx,10D
div bx
mov bx,dx
call print1dec
mov ax,bx
call print1dec
mov dl,0dh
mov ah,2h
int 21h
mov dl,0ah
mov ah,2h
int 21h
ret
print16b_dec endp printbig_dec proc near;用%d输出一个16bit数加上65536,参数放在ax mov dx,1
mov bx,10000D ;dx:ax/bx=ax...dx
div bx
mov bx,dx ;余数
call print1dec
mov ax,bx
mov dx,0
mov bx,1000D
div bx
mov bx,dx
call print1dec
mov ax,bx
mov dx,0
mov bx,100D
div bx
mov bx,dx
call print1dec
mov ax,bx
mov dx,0
mov bx,10D
div bx
mov bx,dx
call print1dec
mov ax,bx
call print1dec
mov dl,0dh
mov ah,2h
int 21h
mov dl,0ah
mov ah,2h
int 21h printbig_dec endp print1dec proc near;用来%d输出一个10进制位,参数放在ax
mov dx,ax
add dl,30h
mov ah,2h
int 21h
ret
print1dec endp end start

运行环境masm6.11

复杂度大概是\(O(n\log n)\)吧

16位masm汇编实现筛法,状压求十万以内素数的更多相关文章

  1. 16位masm汇编实现记忆化递归搜索斐波那契数列第50项

    .model small ;递归fib,使用压缩BCD码,小端派 .data y1 byte 6 dup(0) y2 byte 6 dup(0) vis byte 1,1,1,61 dup(0) ;便 ...

  2. C语言与汇编的嵌入式编程:求100以内素数

    写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...

  3. 埃式筛法——求n以内素数

    素数筛法的关键就在一个“筛”字.算法从小到大枚举所有数,对每一个素数,筛去它的所有倍数,剩下的就都是素数了. 例如:求1-15中的所有素数. 1.  2是素数(唯一需要事先确定的),因此筛去2的所有倍 ...

  4. BZOJ 1087 题解【状压DP】

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3112  Solved: 1816[Submit][ ...

  5. [BZOJ1087] [SCOI2005] 互不侵犯King (状压dp)

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...

  6. 算法复习——状压dp

    状压dp的核心在于,当我们不能通过表现单一的对象的状态来达到dp的最优子结构和无后效性原则时,我们可能保存多个元素的有关信息··这时候利用2进制的01来表示每个元素相关状态并将其压缩成2进制数就可以达 ...

  7. FZU - 2218 Simple String Problem 状压dp

    FZU - 2218Simple String Problem 题目大意:给一个长度为n含有k个不同字母的串,从中挑选出两个连续的子串,要求两个子串中含有不同的字符,问这样的两个子串长度乘积最大是多少 ...

  8. K - Painful Bases 状压dp

    Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...

  9. 状压DP复习笔记

    前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...

随机推荐

  1. Luogu P3511 [POI2010]MOS-Bridges

    题目 二分答案然后混合图欧拉回路,因为没有SPJ所以就没写了,怕写了有锅.

  2. python基本数据类型零碎知识点

                                                                                                        ...

  3. Dasha and Photos CodeForces - 761F (前缀优化)

    大意: 给定n*m初始字符矩阵, 有k个新矩阵, 第$i$个矩阵是由初始矩阵区间赋值得到的, 求选择一个新矩阵, 使得其余新矩阵到它距离和最小. 字符集比较小, 可以考虑每次区间覆盖对每个字符的贡献. ...

  4. ZuulServlet源码分析及ZuulFilter加载

    参考https://yq.aliyun.com/wenji/2...https://blog.csdn.net/lds2227... 1.声明ZuulServlet @Configuration @E ...

  5. python题

    1.一行代码实现1--100之和 利用sum()函数求和 sum(range(1,101) 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 3.列出5个python标准库 Pyth ...

  6. Elasticsearch中文文档,内容不全

    注意 内容不全,这是观看中文文档进行操作的 文档地址 旧版中文文档,部分内容过期 https://www.elastic.co/guide/cn/elasticsearch/guide/current ...

  7. postgres中的函数

    1.编写一个只有入参,没有出参的函数: CREATE OR REPLACE FUNCTION add(a NUMERIC, b NUMERIC) RETURNS NUMERIC AS $$ SELEC ...

  8. 点击切换的JS

    $(function(){ var tabnav = $("#tab-nav ul li"); tabnav.click(function(){ $(this).addClass( ...

  9. vi编辑器中删除文件中所有字符

    在命令模式下,将光标移动到文档最上方(使用gg命令),然后输入dG,删除工作区内所有缓存数据. 如果想要删除某行文档以下的内容,将光标移动到文档相应行,然后输入dG即可.

  10. 标准模板库(STL)

    组件: 容器:管理某类对象的集合. 迭代器:用来在一个对象集合内遍历元素. 算法:处理集合内的元素. 容器 序列式容器:顾名思义.array,vector,deque,list 和 forward_l ...