辗转相除法 相减法 穷举法 求最大公约和最小公倍数

/*
.编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。
例如:输入传入(0 , 5)函数返回5,传入(10 , 9)函数返回1,传入(12 , 4)函数返回4

*/

#include  
void main()   /*  相除法求最大公约数 */
{
	int m, n, a, b, c;
	printf("输入两个整数:\n");
	scanf_s("%d%d", &a, &b);
	m = a;  
	n = b;
	while (b != 0)  /* 余数不为0,继续相除,直到余数为0 */
	{
		c = a%b; a = b;  b = c;
	}
	printf("最小公倍数为:%d\n", m*n / a);
}
  
void main ( )  /* 相减法求最大公约数 */  
{    
   int m, n, a, b, c;  
   printf("Input two integer numbers:\n");  
   scanf ("%d,%d", &a, &b);m=a; n=b;   
     /* a, b不相等,大数减小数,直到相等为止。*/   
   while ( a!=b)   
         if (a>b)  a=a-b;       
         else  b=b-a;  
   printf("The largest common divisor:%d\n", a);  
   printf("The least common multiple:%d\n", m*n/a);  
}  


穷举法

有两整数a和b:

① i=1

② 若a,b能同时被i整除,则t=i

③ i++

④ 若 i <= a(或b),则再回去执行②

⑤ 若 i > a(或b),则t即为最大公约数,结束

改进:

① i= a(或b)

② 若a,b能同时被i整除,则i即为最大公约数,

结束

③ i--,再回去执行②

有两整数a和b:

① i=1

② 若a,b能同时被i整除,则t=i

③ i++

④ 若 i <= a(或b),则再回去执行②

⑤ 若 i > a(或b),则t即为最大公约数,结束

//穷举法求最小公倍数  
     for (i= a; ; i++ )  
         if ( i % a == 0 && i % b ==0 )     break;  
     printf("The least common multiple:%d\n", i )  
   
//多个数的最大公约数和最小公倍数  
     for (i= a; i>0; i-- )  
         if (a%i==0&&b%i==0&&c%i==0)     break;  
     printf("The largest common divisor:%d\n", i);  
     for (i= a; ; i++ )  
         if (i%a==0&&i%b==0&&i% c==0)    break;  
     printf("The least common multiple:%d\n", i ) 




你可能感兴趣的:(C)