求最大公约数
方法一:
更相减损法
两个数不断相减, 循环终止条件是: x与y的值相等
此时x或者y的值就是最大公约数(x == y)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int x, y;
printf("输入两个数字:\n");
scanf("%d %d", &x, &y);
while (x != y)
{
if (x > y)
x = x - y;
else
y = y - x;
}
printf("最大公约数为:%d\n", x);
return 0;
}
方法二:
穷举法
c = (a > b) ? b : a; //将两个数中较小的那个给c
a, b两个数分别都与c相除, 只要有一个数不能整除, 循环继续, c的值递减
直到两个数都能被c整除
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a, b, c;
printf("输入两个数字:\n");
scanf("%d %d", &a, &b);
c = (a > b) ? b : a; //三目运算符
while(a%c != 0 || b%c != 0)
{
c--;
}
printf("最大公约数为:%d\n", c);
return 0;
}
方法三:
辗转相除法
判断a % b的结果:
结果等于0, 说明b就是最大公约数;
结果不为0, 那么a = b; b = c; 重复上面的操作
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a, b, c;
printf("输入两个数字:\n");
scanf("%d %d", &a, &b);
c = a % b;
while (c != 0)
{
a = b;
b = c;
c = a % b;
}
printf("最大公约数为:%d\n", b);
return 0;
}
求最小公倍数
两个数的最小公倍数 = 两个数的乘积 / 两个数的最大公约数