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\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...
随机推荐
- 小记---------sparkRDD的Transformation 和 Action 及案例 原理解释
RDD :弹性分布式数据集:是一个容错的.并行的数据结构,可以让用户显式地将数据存储到磁盘或内存中,并控制数据的分区 RDD是Spark的核心数据结构,通过RDD的依赖关系形成Spark的调度顺序 ...
- TP5使用phpoffice phpexcel包操作excel(导出)
安装composer(window版本) 安装composer(MAC版本) 安装composer(Linux版本) 在PhpStorm配置 导出excel 1.使用composer安装phpoffi ...
- Python 入门 之 print带颜色输出
Python 入门 之 print带颜色输出 1.print带颜色输出书写格式: 开头部分: \033[显示方式; 前景色 ; 背景色 m 结尾部分: \033[0m 详解: 开头部分的三个参数: 显 ...
- 生成ini文件
setProfileString是无法直接生成ini文件的,如果不存在这个ini文件需要先创建,然后再setProfileString.示例代码//保存连接参数到配置文件if not FileExis ...
- Android Studio 配置Gradle总结
一, 问题:①换个新电脑安装完Android Sutdio第一次打开一个工程巨慢怎么办? ② 手动配置Gradle Home为什么总是无效? ③ 明明已经下载了Gradle,配置了gradle hom ...
- SpringMVC @Valid,@RequestBody,@RequestParam标注参数时,进行Postman测试
@Valid(post请求) 可与@RequestBody一起使用 > (@RequestBody @Valid User user) @RequestBody(post请求) 这里的requi ...
- Cypress自动化测试系列之二
本文技术难度★★★,如果前编内容顺利执行,请继续. 如果Selenium尚无法灵活运用的读者,本文可能难度较大. “理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打 ...
- 牛客练习赛47 E DongDong数颜色 (树上启发式合并)
链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...
- [CF#592 E] [二分答案] Minimizing Difference
链接:http://codeforces.com/contest/1244/problem/E 题意: 给定包含$n$个数的数组,你可以执行最多k次操作,使得数组的一个数加1或者减1. 问合理的操作, ...
- xss过滤方法
用的白名单过滤,是我们的论坛自用的方法,也许考虑不周,欢迎来黑我们的论坛!https://www.ebcms.com/forum.html // 安全过滤 function safe_html($ht ...