想要找出两个数的最大公因数,最笨的方法就是蛮力法,除此之外还有欧几里得算法(包括除法和减法)。
第一种方法:蛮力法
蛮力法就是注意寻找最小公因数,然后在相乘,就是数学中的短除法找最大公因数
int main() {
int m;
int n;
int factor = 1;
printf("请输入m和n:\n");
//m和n的值随机产生
srand(time(0));
m = rand() % 100 + 1;//产生[1-101)的随机数
n = rand() % 100 + 1;
printf("n = %d\n", n);
printf("m = %d\n", m);
//从2开始找公因数,逐一相乘
for (int i = 2; i <= m && i <= n; i++) {
while (m % i == 0 && n % i == 0){
factor *= i;
m /= i;
n /= i;
}
}
printf("最大公因数 = %d", factor);
return 0;
}
第二种方法:欧几里得算法(除法)
算法思想:
1、 r = m % n;
2、循环以下步骤直到 r 等于0
(1)m=n;
(2)n=r;
(3)r=m%n;
3、n就是最大公因数,输出 n ;
代码如下:
int main() {
int m;
int n;
int factor;
srand(time(0));
m = rand() % 100 + 1;
n = rand() % 100 + 1;
/*大数除以小数或者小数除以大数都可以
但大数除以小数好理解一下*/
m = m > n ? m : n;//把大数赋给m
n = m < n ? m : n;//把小数赋给n
factor = m % n;
printf("m = %d\n", m);
printf("n = %d\n", n);
printf("------------------------\n");
while(factor != 0){
m = n;
n = factor;
factor = m % n;
}
factor = n;
printf("factor = %d\n", factor);
return 0;
}
第三种方法:欧几里得算法(减法)
算法思想:
1、r= m - n;(m>n)
2、循环以下步骤直到 r 等于0
(1)m=n;(n>r)
(2)n=r;(n>r)
(3)r=m - n;
3、n就是最大公因数,输出 n ;
代码如下:
int main() {
int m;
int n;
int factor;
srand(time(0));
m = rand() % 100 + 1;
n = rand() % 100 + 1;
m = m > n ? m : n;
n = m < n ? m : n;
factor = m - n;
printf("m = %d\n", m);
printf("n = %d\n", n);
printf("------------------------\n");
while(factor != 0){
m = n > factor ? n : factor;//把大数赋给m
n = n < factor ? n : factor;//把小数赋给n
factor = m - n;
}
factor = n;
printf("factor = %d\n", factor);
return 0;
}