(如果需要对分数进行约分,那么)可以折半的话,就折半(也就是用2来约分)。如果不可以折半的话,那么就比较分母和分子的大小,用大数减去小数,互相减来减去,一直到减数与差相等为止,用这个相等的数字来约分。
实例:
用更相减损术求98与63的最大公约数。
解:由于63不是偶数,把98和63以大数减小数,并辗转相减:
98-63=35
63-35=28
35-28=7
28-7=21
21-7=14
14-7=7
所以,98和63的最大公约数等于7。
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
int count = 1;
scanf("%d,%d", &m, &n);
while ((m % 2 == 0) && (n % 2 == 0))
{
count *= 2;
m = m / 2;
n = n / 2;
}
while (m != n)
{
if (m > n)
{
m = m - n;
}
else
{
n = n - m;
}
}
printf("%d", n*count);
return 0;
}
辗转相除法
实例 输入值为24,18
24 % 18= 6 ; 18 % 6 = 0;最大公约数为6
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
int c = 0;
int t = 0;
scanf("%d,%d", &m, &n);
c = m % n;
while (c != 0)
{
m = n;
n = c;
c = m % n;
}
printf("%d", n);
return 0;
}
穷举法
对两个数中最小的数进行减一,直到两数可以整除这个数时就是最小公倍数
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
scanf("%d,%d", &m, &n);
int min = (m < n) ? m : n;
int a = min;
while (1)
{
if ((m % a == 0) && (n % a == 0))
{
break;
}
a--;
}
printf("%d", a);
}