求两个数的最大公约数(列举法与辗转相除法)

最大公约数定义:把能够整除某一个数的数,叫做这个数的约数。几个数所公有的约数叫这几个数的公约数。公约数中最大的一个叫做这几个数的最大公约数。 例如:27和15,,27 的约数有1,27,3,9;15的约数为:1,15,3,5。而27 和15 的公约数为1,3.则最大公约数为3。

在了解了最大公约数后我们便可以从同时要被两个数整除,且还是最大值可以想到一个比较麻烦的方法。

方法一:列举法

用循环进行列举依次排查,从1开始到它本身(这里的循环结束的表示可以在两个数之间随意选择,只要可以取到它本身就可以),因为我们是从小到大依次排列过来的所以每次只要将可以整除的数字赋值给一个变量就可以,保证变量每次都会更新为最大值。

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a, b;
 5     int j = 0;
 6     printf("请输入两个整数:\n");
 7     printf("a=");
 8     scanf("%d", &a);
 9     printf("b=");
10     scanf("%d", &b);
11     //这里从1开始依次排查,直到取到它本身为止
12     //循环可以保证每次取到的公约数依次增大
13     for (int i = 1;i <= b;i++)
14     {
15         if (a % i == 0 && b % i == 0)
16         {
17             j = i;//将公约数赋值给变量
18         }
19     }
20     printf("最大公约数为:%d", j);
21     
22     return 0;
23 }    

方法二:辗转相除法

先将两个整数a与b进行相除,如果余数为0(a%b==0),则b为两数的最大公约数;如果不等于0,则将b赋值给a,将余数赋值给b,在对a与b进行相除,直到余数为0时终止(a%b==0),则b为最大公约数。

 1 #include<stdio.h>
 2 int main()
 3 {
 4     //方法二:辗转相除法
 5     int a, b, i;
 6     printf("请输入两个整数:\n");
 7     printf("a=");
 8     scanf("%d", &a);
 9     printf("b=");
10     scanf("%d", &b);
11     i = a % b;
12     while(i != 0)
13     {
14         a = b;
15         b = i;
16         i = a % b;
17     }
18     printf("%d",b);
19     
20     return 0;
21 }

猜你喜欢

转载自www.cnblogs.com/cuckoo-/p/10267614.html