16位masm汇编实现筛法,状压求十万以内素数
.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汇编实现筛法,状压求十万以内素数的更多相关文章
- 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) ;便 ...
- C语言与汇编的嵌入式编程:求100以内素数
写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...
- 埃式筛法——求n以内素数
素数筛法的关键就在一个“筛”字.算法从小到大枚举所有数,对每一个素数,筛去它的所有倍数,剩下的就都是素数了. 例如:求1-15中的所有素数. 1. 2是素数(唯一需要事先确定的),因此筛去2的所有倍 ...
- BZOJ 1087 题解【状压DP】
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3112 Solved: 1816[Submit][ ...
- [BZOJ1087] [SCOI2005] 互不侵犯King (状压dp)
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...
- 算法复习——状压dp
状压dp的核心在于,当我们不能通过表现单一的对象的状态来达到dp的最优子结构和无后效性原则时,我们可能保存多个元素的有关信息··这时候利用2进制的01来表示每个元素相关状态并将其压缩成2进制数就可以达 ...
- FZU - 2218 Simple String Problem 状压dp
FZU - 2218Simple String Problem 题目大意:给一个长度为n含有k个不同字母的串,从中挑选出两个连续的子串,要求两个子串中含有不同的字符,问这样的两个子串长度乘积最大是多少 ...
- K - Painful Bases 状压dp
Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...
- 状压DP复习笔记
前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...
随机推荐
- [转帖]一张图让你看懂InnoDB
一张图让你看懂InnoDB 2018年05月10日 10:02:34 灵魂自由的忙人 阅读数 299 https://blog.csdn.net/xiaoyi23000/article/details ...
- java中利用hanlp比较两个文本相似度的步骤
使用 HanLP - 汉语言处理包 来处理,他能处理很多事情,如分词.调用分词器.命名实体识别.人名识别.地名识别.词性识别.篇章理解.关键词提取.简繁拼音转换.拼音转换.根据输入智能推荐.自定义分词 ...
- const和static const的区别(未整理)
对于C/C++语言来讲,const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调 ...
- Android新版xUtils3工具类相关debug
首先出现问题是 build.gradle中的csayısıom.lidroid.xutils:xutils:2.6.13报错了,所以想到是版本的问题,github上搜了xutils发现有新版xutil ...
- 网络信息统计netstat|ss|ip
1:netstate[弃用] netstat的作用: 需求 原命令 新命令 1:网络连接 netstat -a ss 2:路由表 netstat -r ip route 3:统计接口 netstat ...
- C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
- O009、KVM 网络虚拟化基础
参考https://www.cnblogs.com/CloudMan6/p/5289590.html 网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源, ...
- 基于bootstrap的分页插件
之前做的分页,是自己后端写一堆代码,返回给前端页面显示,感觉比较繁重.不灵活.今天研究下基于bootstrap的做的插件,整理如下: 在使用bootstrap的插件的时候,需要导入一些css.js. ...
- 【异常】org.apache.hadoop.hdfs.server.common.InconsistentFSStateException
1 异常信息 - ::, INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Maximum size of an xattr: -- ...
- 构建docker基本镜像
1.准备: 创建一个目录oldboy-hello 2.编写Dockerfile 内容如下,只有三行 FROM scratch ADD hello / CMD ["/hello"] ...