N个数的最大公约数和最小公倍数以及HANkson问题

N个数的最大公约数和最小公倍数以及HANkson问题

1.题目分析
1.基本要求:求N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题)。
2.提高要求:进行最大公约数和最小公倍数求解的逆运算。(已知某数和一个数a0的最大公约数为a1,和另外一个数b0的最小公倍数为b1,求满足条件的数x的数量,可以进行多组)
在进行本次题目程序编写前,应该考虑以下几点:
① 进行n个数的最大公约数求解时,要先设置一个数组用于存储输入的N个数。
② 设置N个数求最大公约数的算法思想。
③ 在进行完最大公约数的求解后,求出N个数的最小公倍数。
④ 进行最大公约数和最小公倍数求解的逆运算时,需要注意要使输入的几个数满足条件:前两个之间满足整除关系,后两个数同样满足整除关系。
⑤ 在某一个范围内找到满足条件(x和一个数a0的最大公约数为a1,和另外一个数b0的最小公倍数为b1,)的x,并输出其数量。
2.算法构造
1.数据输入与存储:求最大公约数的n个数存储在数组(a[MAX]中MAX的值由宏定义决定),n个数由随机函数产生。(a[i]=rand()%100+1;);进行最大公约数和最小公倍数逆运算的数由键盘输入(输入第一行为一个正整数n,表示有n组输入数据。接下来的n行每行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。此处输进行异常处理,数据保证a[i][1]能被a[i][0]整除,a[i][3]能被a[i][2]整除),输入数存储在数组a[MAX][4].
2.具体算法构造:①求N个数的最大公约数和最小公倍数算法(调用函数count()):是运用for循环对数组a[MAX]相邻元素进行最大公约数求解,求最小公倍数调用函数(doub())。②求最大公因数采用的是辗转相除法。求最大公约数和最小公倍数的逆算法是:在某一个范围内找到满足条件(x和一个数a[i][0]的最大公约数为a[i][1],和另外一个数a[i][2]的最小公倍数为a[i][3])的x,并输出x的数目(调用函数Excountn())。
3.算法实现

#include 
#include 
#define MAX 1024
int first(int a,int b)//辗转相除法(函数嵌套调用)
{int temp;//设置一个中间量将大的数放在a中,小的数放在b中。
if(a

4.调试、测试及运行结果
调试结果:N个数的最大公约数和最小公倍数以及HANkson问题_第1张图片

测试结果:
① 求N个数的最大公约数和最小公倍数函数Countn()的测试
N个数的最大公约数和最小公倍数以及HANkson问题_第2张图片
② 求最大公约数和最小公倍数的逆运算的测试N个数的最大公约数和最小公倍数以及HANkson问题_第3张图片

N个数的最大公约数和最小公倍数以及HANkson问题_第4张图片
在这里插入图片描述运行结果:N个数的最大公约数和最小公倍数以及HANkson问题_第5张图片
N个数的最大公约数和最小公倍数以及HANkson问题_第6张图片
5.经验归纳
本次作业是求N个数的最大公约数和最小公倍数。并进行最大公约数和最小公倍数求解的逆运算。(已知某数和一个数a0的最大公约数为a1,和另外一个数b0的最小公倍数为b1,求满足条件的数x的数量,可以进行多组),在程序编写过程中,遇到的主要问题是对求多个数的最大公约数算法分析不清楚,以至于结果错误。通过这次作业我得到的感悟是:遇到困难时的心态要平和,冷静地去查找问题并解决问题。注意知识的总结和积累。最近,其实不止是本次程序实验带给我的收获,就是作为一个合格的程序员,要注意对知识的积累和知识体系的梳理,每隔一段时间就应该对自己近期的工作有个小结和反思,只有这样,才能不断进步,因此,我在CSDN开通了自己的博客,关于本次实验写的知识点总结在里面都有。

你可能感兴趣的:(N个数的最大公约数和最小公倍数以及HANkson问题)