求N个数最大公约数和最小公倍数

求N个数的最大公约数和最小公倍数(C语言实现)

一、题目分析:

基本要求为:求N个数的最大公约数和最小公倍数,用C或C++或java或python语言实现程序解决问题;提高要求为:Hankson问题。
基本要求较为简单,是对GCD算法的进一步运用,与第一次上机作业有相似之处,选择辗转相除法求解最大公约数,用求解的最大公约数和整数乘积计算最小公倍数并输出。

二、 算法思路:

求N个数的最大公约数和最小公倍数,要求为N个数,所以选择数组存储N个数的数值,使用随机函数对用户要求的整数个数进行赋值,将随机函数生成的N个数存入数组中。后对数组中的数进行运算,用for循环运行n+1次辗转相除法求得最大公约数,再根据数学定义,求得数组所有数的乘积除以最大公约数。

三、 源代码:
基本要求:

#include<stdio.h>   
#include<stdlib.h>   //随机生成函数头文件
void main()
{
  int i,k,m,n;
  int a,b,temp,r;
  int w[101];
  printf("Please
input the quantity of integer:");     //输入整数数量
scanf("%d",&n);
for(i=1;i<n+1;i++)       //利用随机函数给n个整数赋值
  {
       w[i]=1+rand()%100;        
       printf("No.%d is %d,\n",i,w[i]);
  }
  b=w[1];
for(k=1;k<n+1;k++)        //使用n+1次辗转相除法以求n个数的最大公约数
  { a=w[k];
    if(a<b)
        temp=a;a=b;b=temp;    
    r=a%b;
    while(r!=0)               //辗转相除法
      { 
        a=b;
        b=r;           
        r=a%b;
      }
  }
for(i=1;i<n+1;i++)
{
    m=m*w[i];
}
printf("The highest common divisor is %d\n",b);    //输出最大公约数
printf("The least common multiple is %d\n",m/b);   //输出最小公倍数
}

四、调试截图
在这里插入图片描述在这里插入图片描述
五、 测试截图:

在这里插入图片描述

六、总结:

本周的作业,使得我对GCD算法有了更深层次的理解,熟练了对辗转相除法的应用,将前后两周所学相结合,对于for循环、数组、随机函数的运用更加熟练,算法设计变得更加简洁明了。并运用了VC++6.0对程序模块进行调试。

但是提高要求未能达成,从网上找了相应的实现代码进行学习后,对于提高要求中的Hankson问题有了初步的理解,但是独立进行代码实现较为拙劣,希望下次对于复杂问题能有更深层次的见解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值