C语言描述:
#include <stdio.h>
// 求最大公约数函数
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 求最小公倍数函数
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
int main() {
int num1, num2;
scanf("%d %d", &num1, &num2);
// 计算最大公约数
int greatestCommonDivisor = gcd(num1, num2);
printf("最大公约数为:%d\n", greatestCommonDivisor);
// 计算最小公倍数
int leastCommonMultiple = lcm(num1, num2);
printf("最小公倍数为:%d\n", leastCommonMultiple);
return 0;
}
汇编语言:
;九章算术法求最大公约数和最小公倍数
include irvine32.inc
.data
dat1 dword 98
dat2 dword 63
cnt dword 1
gcd dword ?
.code
main proc
mov eax,0
mov ebx,0
mov eax,dat1
mov ebx,dat2
eventest:
test eax,1
jnz even1 ;eax为偶数,跳转到even1
jmp again
even1:
test ebx,1
jnz even2 ;ebx为偶数,跳转到even2
jmp again
even2:
shr eax,1 ;eax/=2
shr ebx,1 ;ebx/=2
shl cnt,1 ;cnt*=2
jmp eventest
again:
cmp eax,ebx ;比较两个数据大小,保证大数减去小数
jg big
jl small
je next
big:
sub eax,ebx
jmp again
small:
sub ebx,eax
jmp again
next:
mul cnt
mov gcd,eax ;算出最大公约数
call writeint ;输出最大公约数
call crlf
mov eax,dat1
mul dat2
div gcd ;最小公倍数=dat1*dat2/gcd
call writeint
exit
main endp
end main
运行结果: