判断条件:
for(int i = num/2; i>=2; i–)
{
if(num % i == 0) //被整除
//不是素数
}
根据判断条件,有汇编程序:
;功能:求2~100之间的所有素数
;作者:王文堃
;创建时间:2016/4/11
INCLUDE vcIO.inc
.data
array DWORD 100 dup(0)
str_output BYTE "2~100的素数有:",0ah,0
str_printf BYTE "%3d"
.code
main PROC
xor esi,esi ;初始化esi为0,记录保存数组下标
mov ecx, 2 ;ecx为要判断的数
jmp TESTING ;外层循环
FORLOOP:
mov ebx, ecx
shr ebx,1 ;通过右移一位求要判断的数的一半
jmp TESTING2 ;内层循环
FORLOOP2:
mov eax, ecx ;将该数设置为被除数
mov edx,0 ;清空edx
div ebx
cmp dl,0 ;判断i%j==0
je NEXT ;如果余数为零,该数不为素数,直接取下一个数
dec ebx ;否则余数不为零,继续除,直到除到2为止
TESTING2:
cmp ebx, 2 ;从该数的一半到2
jae FORLOOP2
;从数的一半除到2都没有能整除的,认为该数为素数
mov array[esi*4], ecx ;将该数存入数组中
inc esi
NEXT:
inc ecx
TESTING:
cmp ecx,100 ;判断从2~100的数
jbe FORLOOP
;输出
invoke printf, OFFSET str_output ;输出提示符
mov edi,0 ;数组下标初始化
jmp TESTING3 ;输出循环
FORLOOP3:
pushad
invoke printf, OFFSET str_printf, array[edi*4] ;输出素数
popad
inc edi
TESTING3:
cmp edi,esi ;从0到esi即素数的个数-1
jb FORLOOP3
ret
main ENDP
;子程序
END main