求两个数的最大公约数(穷尽法、辗转相除法)

给定两个数字,求他们的最大公约数,你会怎么求呢?
假定 数字a b。

穷尽法

穷尽法:,从数字2开始到a,b本身(为什么不是1呢?),每个都取余数,当同时满足ab的余数为0时,这个数字就是他俩的余数,从小到大开始求,最后一个直到ab中交较小的哪一个。最后一个自然就是最大的啦!
源代码如下:

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
//求两个数的最大公约数
int Commonmeasure(int a, int b)//求两个数的最大公约数
{
    
    
 int x = 0, y = 0;
 int result = 0, i = 0;
 for (i = 2; i <=a && i <= b; i++){
    
    
  x = a%i, y = b%i;
  {
    
    if (x == 0 && y == 0)
  {
    
    
   result = i;
  }
  else
  {
    
    
   continue;
  }
  }
 }
 return result;
}
int main()
{
    
    
 //求最大公约数的最笨办法!
 int a = 0, b = 0;
 printf("请输入要求公约数的两个整数a= b=\n");
 scanf("%d%d", &a,&b);
 int result = Commonmeasure(a, b);
 {
    
    if (result){
    
    
  printf("a and b的最大公约数为%d\n", Commonmeasure(a, b));
 }
 else
 {
    
    
  printf("a and b没有公约数\n");
 }
 }
 system("pause")
 }

辗转相除法:

辗转相除法:即用ab中的较大数除以较小数字,除不尽就用小的数b再除得到的余数c,如此循环,直到最后余数为0时,最后这个被除数“b”几位最大公约数。(表述不清,多有见谅,看完代码,定能理解)

源代码

   int main()
{
    
    
	int a = 18;
	int b = 24;
	int c = 0;

	while(c=a%b)
	{
    
    
		a = b;
		b = c;
	}

	printf("%d\n", b);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Zhou000815/article/details/109137934