最大公约数和最小公倍数(C语言)

 

基本要求: 求N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题。

  1. 题目分析

辗转相除法(又名欧几里德法)C语言中用于计算两个正整数a,b的最大公约数和最小公倍数,实质它依赖于下面的定理:

 

                            a                     b=0

 

gcd(a,b) =

 

                        gcd(b,a mod b)         b!=0

 求N个数的最大公约数和最小公倍数思想和其一样,通过调用函数实现。

2.算法构造

  最大公约数和最小公倍数的关系:假设有a,b两个数,p,q分别是它们的最大公约数和最小公倍数,则有:q=(a*b)/p。要求n个数的最大公约数,只需先求出两个数的最大公约数,然后再将这两个数求出的结果和下一个数求最大公约数就可以了,如此往复,即可求出这n个数的最大公约数。

3.算法实现程序源代码

#include 
#include
/*辗转相除法*/
int divisor1(int a,int b)    /*自定义函数求两数的最大公约数*/
{
  int  temp;          /*定义整型变量*/
  if(a0;N--)                
		{
			for(m=0;m<4;m++)        
		{
			scanf("%d",&b[m]);
		}
		
		if(b[0]%b[1]||b[3]%b[2])      //判断是否满足题目条件
	
			printf("输入不符合条件,请重新输入:\n");
			for(m=0;m<4;m++)
			{
				scanf("%d",&b[m]);
			}
		
		for( x;x<=b[3];x++)          //循环计算有多少个满足条件的数
		{
			if(divisor1(x,b[0])==b[1]&&multiple1(x,b[2])==b[3])   //调用计算最大公约数和最小公倍数的函数
				sum++;
		}
		printf("一共有%d个数满足条件\n",sum);
                            
		}

}

4.调试、测试及运行结果

  1. 调试结果

输入3,9,12

在multiple2()函数出调试,截图如下所示

最大公约数和最小公倍数(C语言)_第1张图片

 

最大公约数和最小公倍数(C语言)_第2张图片

  1. 测试结果

1.测试最大公约数

#include 
#include
/*辗转相除法*/
int divisor1(int a,int b)    /*自定义函数求两数的最大公约数*/
{
  int  temp;          /*定义整型变量*/
  if(a

 截图如下所示:

最大公约数和最小公倍数(C语言)_第3张图片

 

  1. 测试最小公倍数
#include 
#include
/*辗转相除法*/
int divisor1(int a,int b)    /*自定义函数求两数的最大公约数*/
{
  int  temp;          /*定义整型变量*/
  if(a

 截图如下所示:

最大公约数和最小公倍数(C语言)_第4张图片

 

 

  1. 运行结果

1.输入两个互质的自然数,截图如下所示

最大公约数和最小公倍数(C语言)_第5张图片

 2.输入两个自然数

最大公约数和最小公倍数(C语言)_第6张图片

 

3.输入三个有公约数的自然数

最大公约数和最小公倍数(C语言)_第7张图片

4.输入三个互质的自然数

最大公约数和最小公倍数(C语言)_第8张图片

5.经验归纳

此次实验在上次求两个最大公约数的基础上进行了扩展,相对来说比较简单,通过调用函数来实现求N个最大公约数和最小公倍数的功能,在上次实验的基础上做此次实验,就感觉比较简单,所以还是要多多练习,不断实践!Hankson问题基本要求实现了,但是还是没有代码可读性不高,还需继续完善修改。具体完善后再修改~~~Fighting  

 

你可能感兴趣的:(最大公约数和最小公倍数(C语言))