求100以内的素数(微机原理大作业)
一、问题描述
求 100 以内的素数。
(1)以十进制输出这些素数
(2)统计这些素数的个数,以十进制形式输出。
(3)计算这些素数之和,以十进制形式输出。
(4)数据的输入和结果的输出都要有必要的提示,且提示独占一行。
(5)要使用到子程序。
二、问题分析
1.什么是素数?
在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
2.100以内的素数怎么求?
双层循环嵌套
3.求个数及和
其他高级语言算法
public static void main(String[] args) {
int and=0;
int num=0;
for(int i=2;i<100;i++){
int j=2;
for(;j<i;j++){
if(i%j==0){
break;
}
}
if(i==j){
and+=i;
num++;
//输出
System.out.print(i+" ");
}
}
//输出
System.out.print("\nand:"+and);
System.out.println("\tnum:"+num);
}
运行截图:
4.十进制转换
int var1=1060
int a[4]
int i=0
do
A[i]=var1%10
var1=var1/10
if(var1==0)break
loop(true)
三、源程序代码清单
data segment
text0 DB 'Prime numbers within 100 are:',0DH,0AH,'$'
text1 DB 0DH,0AH,'Number of prime numbers within 100:',0DH,0AH,'$'
text2 DB 0DH,0AH,'Sum of prime numbers within 100:',0DH,0AH,'$'
num DB 0
plus dw 0
var1 DB 0,4 dup(0)
data ends
assume cs:code,ds:data
code segment
start:
;;;(开始);;;;;;;;;;一定得加这两句
mov ax,data
mov ds,ax
;;;(结束);;;;;;;;;;一定得加这两句
mov dx,OFFSET text0
MOV AH,9H
INT 21H ;输出提示text0
;mov num,0
;mov plus,0
mov cx,99
aa1: ;第一层循环
mov ax,101
sub ax,cx
push cx
call demo1 ;判断ax是否为素数
pop cx
loop aa1
;;;(开始);;;;;;;;;;输出提示text
mov dx,offset text1
mov ah,9
int 21h
mov dl,num
mov dh,0
call demo2
mov dx,offset text2
mov ah,9
int 21h
mov dx,plus
call demo2
;;;(开始);;;;;;;;;;输出提示text
mov ax,4c00h
int 21h
demo1 proc ;判断ax是否为素数
mov cx,ax ;ax=2,
dec cx ;自减指令,cx=1
aa2: ;第二层循环
push ax
div cl ;ax%cl=ah
cmp ah,0
pop ax
je aa2end ;if(i%j==0)break
loop aa2
aa2end:
cmp cx,1
jne demo1end
inc num ;自增
mov ah,0
add plus,ax
mov dx,ax
call demo2 ;输出多位数
demo1end:
ret
demo1 endp
demo2 proc ;输出多位数
push dx
;mov dx,1060
mov ax,dx
mov dx,0
;mov var1,0
again:
mov bx,10
div bx
inc var1[0]
mov bl,var1
mov bh,0
mov var1[bx],dl
mov dx,0
cmp ax,0
jne again
again1:
mov bl,var1
mov bh,0
mov dl,var1[bx]
add dl,30h
mov ah,2
int 21h
dec var1
mov al,var1
cmp al,0
jne again1
mov dl,9H ;制表符
mov ah,2
int 21h
pop dx
ret
demo2 endp
code ends
end start
四、运行结果与分析
五、心得体会
1.1060使用div时注意数值类型为word
用div bx;dxax/bx->ax,dxax%bx->dx
2.一定不能漏了这两句,不然输出内容前面会好多乱码
mov ax,data
mov ds,ax
3.汉字提示输出会乱码
ps:看看有没有银抄作业/斜眼笑