我们使用的方法是辗转相除法:
思路是:
首先我们要定义三个变量,m,n,r
m对n取模得到的余数用r来保存,把n赋值给m,再把r赋值给n继续取模
r=m%n
m=n;
n=r;
直到m%n为0时停止,打印出n,n就是最大公约数
既然是多次取模那么我们就会用到循环
我们用while()循环语句
因为当m%n为0是代表n为最大公约数所以循环条件可以设置为while(m%n)
算法实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int m,n,r;
scanf("%d%d", &m, &n);
while (m % n)
{
r = m % n;
m = n;
n = r;
}
printf("%d", n);
return 0;
}
还可以更简单,可以省去一步,把r=m%n放入条件之中,这样代码的效率是不是会更高一些呢?
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int m,n,r;
scanf("%d%d", &m, &n);
while (r=m % n)
{
m = n;
n = r;
}
printf("%d", n);
return 0;
}