简化的歌德巴赫猜想:任何一个大于6的偶数均可以表示为两个素数之和。现从键盘输入一个0~65535 之间的无符号整数,试验证歌德巴赫猜想。

题目:
简化的歌德巴赫猜想:任何一个大于6的偶数均可以表示为两个素数之和。现从键盘输入一个0~65535之间的无符号整数,试验证歌德巴赫猜想。

如输入数12,输出:
12=5+7

如输入数20,输出:
20=3+17
20=7+13

如输入数7,输出:
Must be even

如输入数3,输出:
Must be greater than or equal to 6



DATAS SEGMENT
    x dw ?
    string1 db 'Must be even',0dh,0ah,24h
    string2 db 'Must be greater than or equal 6',0dh,0ah,24h
    crlf db 0dh,0ah,24h	
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    
    mov bx,0
    newChar:	;十进制输入
    	mov ah,1
    	int 21h
    	sub al,30h
    	jl next
    	cmp al,9
    	jg next
    	cbw
    	xchg ax,bx
    	mov cx,10
    	mul cx
    	xchg ax,bx
    	add bx,ax
    	jmp newChar
    next:
    	cmp bx,6
    	jl lessNum
    	test bx,01h
    	jnz oddNum
    	
    	mov x,bx
    	mov ax,bx
    	cwd
    	mov cx,2
    	div cx		;ax=商,即x/2
    	mov di,ax	;di=(x/2),	3 <= cx <= di
    	
    	
    	nextNum:
    		inc cx
    		mov bx,cx
    		call prime
    		cmp bx,0
    		jnz A10
    		cmp cx,di
    		jge last
    		jmp nextNum
    	A10:
    		mov bx,x
    		sub bx,cx
    		call prime
    		cmp bx,0
    		jnz display
    		cmp cx,di
    		jge last
    		jmp nextNum
    	display:
    		mov ax,x
    		call BintoDeci
    		
    		mov dl,'='
    		mov ah,2
    		int 21h
    		
    		mov ax,cx
    		call BintoDeci
    		
    		mov dl,'+'
    		mov ah,2
    		int 21h
    		
    		mov ax,x
    		sub ax,cx
    		call BintoDeci
    		lea dx,crlf
    		mov ah,9
    		int 21h
    		
    		cmp cx,di
    		jge last
    		jmp nextNum
    	   	
    lessNum:
    	lea dx,string2
    	mov ah,9
    	int 21h
    	jmp last
    oddNum:
    	lea dx,string1
    	mov ah,9
    	int 21h
    	jmp last
    	
    BintoDeci proc near
    	push si
    	push cx
    	push dx
    	mov si,10
    	mov cx,0
    	rotate:
    		xor dx,dx
    		div si
    		push dx
    		inc cx
    		cmp ax,0
    		jnz rotate
    	output:
    		pop dx
    		mov ah,2
    		add dl,30h
    		int 21h
    		loop output
    	pop dx
    	pop cx
    	pop si
    	ret
    BintoDeci endp
    	
    	
    ;bx中存储着待判断的数,如果是素数,bx=1;否则bx=0
    prime proc near
    	push si
    	push cx
    	mov si,2
    	mov cx,bx
    	dec cx
    	A20:
    		mov ax,bx
    		cwd
    		div si
    		cmp dx,0
    		jz notPrime
    		inc si
    		cmp si,cx
    		jle A20
    	mov bx,1
    	jmp exit
    	notPrime:
    		mov bx,0
    	exit:
    		pop cx
    		pop si
    		ret
    prime endp
    	
    last:	
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值