C语言某题,求两个数m和n的最大公约数

2

C语言某题,求两个数m和n的最大公约数。个人感觉这道题很好,不仅可以更深入的理解解题思路(算法),对代码编写也是一个好的锻炼。思路如下:
S1:最大公约数,即“指某几个整数共有公约数中的最大一个”,那么具体什么是公约数呢?不理解的同学可以报考最近的初中,重新学习一下。如果是m和n的话,首先要确定其大小,因为如果这个公约数属于数值小的一方,那么他也必定属于数值大的一方,另外其中较小数也就是较大数的公约数也说不定。
S2:找出较小一方后,以(较小一方-1)为分母,和较小一方相除。为什么要-1呢,因为任何数都可以被自己整除,是没有意义的。
S3:不断循环,直到找到最近能被自己整除的,那么这个数字就是最大公约数。

代码及说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main()
{
int m,n;
scanf("%d %d", &m, &n); /*用户输入m和n*/
int min;
if (m>n) min=n; /*比较m和n大小*/
else min=m;
for (int i=min; i>=1 ;i--)/*定义i循环,i先等于最小一方,循环一次减少1*/
{
if (m%i==0 && n%i==0)/*使m和n都除以i,余数为零时满足条件,否则继续循环*/
{
printf("%d是%d和%d的最大公约数\n", i, m, n);
break;/*满足条件后循环终止*/
}
— cloudxiao 2009,9,11

2 Comments

  1. 第三方 says:

    最小公约数不都是1吗

  2. cloudxiao says:

    恩。。我写错了,已经改正,谢谢指出~

Leave A Reply