示例:72=2^3 * 3^2
C语言描述:
#include <stdio.h> // 素数分解函数 void primeFactorization(int n) { int i; printf("%d=", n); // 循环找出所有因子 for (i = 2; i <= n; i++) { // 如果是质数 while (n % i == 0) { printf("%d", i); n /= i; if (n != 1) { printf("*"); } } } printf("\n"); } int main() { int num; // 输入需要分解的正整数 printf("请输入一个正整数:"); scanf("%d", &num); // 调用素数分解函数 primeFactorization(num); return 0; }
汇编语言:
include irvine32.inc .data .code factorNumber proc push ebp mov ebp,esp sub esp,400 pushad mov ebx,eax mov ecx,0 mov [ebp-4],ecx mov esi,2 again: mov eax,ebx mov ecx,2 mov edx,0 div ecx cmp esi,eax jg final_3 call isprime cmp ecx,1 jne final_2 call max final_2: add esi,1 jmp again final_3: call output add esp,84 pop ebp popad ret 4 factorNumber endp isprime proc mov edi,esi cmp edi,1 je final_0 mov ecx,2 mov eax,edi mov edx,0 div ecx mov ecx,eax mov edi,2 again: cmp edi,ecx jg final_1 mov edx,0 mov eax,esi div edi cmp edx,0 je final_0 add edi,1 jmp again final_0: mov ecx,0 ret final_1: mov ecx,1 ret isprime endp max proc mov ecx,0 mov edx,0 mov eax,ebx div esi cmp edx,0 jne final_5 add ecx,1 again: mov edx,0 div esi cmp edx,0 jne final_6 add ecx,1 jmp again final_6: mov edi,1 add [ebp-4],edi mov edi,[ebp-4] mov [ebp-4+4*edi],esi mov [ebp+4*edi],ecx mov edi,1 add [ebp-4],edi ret final_5: ret max endp main proc call readint push eax call factorNumber exit main endp output proc mov esi,1 again: cmp esi,[ebp-4] jge final_7 mov eax,[ebp-4+4*esi] cmp esi,1 jne output_1 call writeint mov al,'^' call writechar mov eax,[ebp+4*esi] call writeint add esi,2 jmp again output_1: mov al,'*' call writechar mov eax,[ebp-4+4*esi] call writeint mov al,'^' call writechar mov eax,[ebp+4*esi] call writeint add esi,2 jmp again final_7: ret output endp end main
运行结果: