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\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...
随机推荐
- job创建之后,不运行
创建job的时候要commit,然后还要看job是否分派进程 加上之后还是没有执行,后来发现 show parameter job_queue_process; 的结果为0,没有为job分配进程,所以 ...
- jsp文件
新建的jsp文件比新建的html文件多了一行内容<%@ page contentType="text/html; charset=utf-8" %>,这样不会显示乱码 ...
- thinkphp框架部署出现404解决
1:虚拟机配置文件修改: location / { index index.php index.html; if (!-e $request_filename) { rewrite ^/index.p ...
- centos7安装activemq5.15
1. 官网下载 http://activemq.apache.org/components/classic/download/ 上传到服务器 2. 安装 tar zxf apache-activemq ...
- AppCan调试问题
来源:http://edu.appcan.cn/theVideoMain1.html?chapterId=248_1 第1步, 生成AppCan调试中心 第2步, 启动AppCan调试中心 第3步, ...
- python_0基础开始_day11
第十一节 一,函数名的第一类对象 函数名当作值,赋值给变量 print(函数名) 查看看书的内存地址 函数名可以当作容器中的元素 lis = []dic = {}def func(): prin ...
- Tomcat Connector(BIO, NIO, APR)三种运行模式(转)
Tomcat支持三种接收请求的处理方式:BIO.NIO.APR . BIO 阻塞式I/O操作即使用的是传统 I/O操作,Tomcat7以下版本默认情况下是以BIO模式运行的,由于每个请求都要创建一个线 ...
- Yii2 增删查改
查: User::find()->all(); //返回所有用户数据:User::findOne($id); //返回 主键 id=1 的一条数据: User::find()-> ...
- O002、虚拟化
参考https://www.cnblogs.com/CloudMan6/p/5233484.html OpenStack 是云操作系统,要学习 OpenStack,首先需要掌握一些虚拟化和云计算的 ...
- Vue-cli脚手架起步
1.安装node.js 下载地址:http://nodejs.cn/download/ 测试是否安装成功 node -V 检测安装包 npm -v 检测npm 2.安装webpack npm inst ...