判斷條件:
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