微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题基本算法简介(一)
栏目软件世界
作者黄陀
发布2001年22期
  编者按:应广大读者要求,希望我们向大家讲解一些编程基础知识。从这期开始,我们将连续向大家介绍一些在程序设计方面的基本算法。
   用辗转相除法求最大公约数和最小公倍数
  我们在程序设计中,经常会遇到一些在一大堆数据中,求这些数据共有特性的情况。下面我们以两个例子向大家介绍这种算法。
  一般地说,求最小公倍数用两个数的积除以最大公约数即可,而求最大公约数有两种算法:
  1.穷举法,从较小数由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数,
  2.辗转相除法,又名欧几里德算法,是计算最大公约数和最小公倍数的重要方法,比穷举法简便得多。
  主要过程是(设两数为a,b,a>b):
  1)a除以b得余数c;
  2)令a=c,b除以a得余数c;
  3)如果a不等于b则跳回1),否则结束,最后一次的余数就是两数的最大公约数。
  下面我们用C语言(Turbo C 2.0)来分别演示这两种方法。
   程序一:
  #include<stdio.h>
  int max(a,b){
  if(a>=b)
  return(a);
  else
  return(b);}
  int zdgys(int a,int b){ 
  int m;
  for(m=max(a,b);m>0;m--)
  if((a%m==0)&&(b%m==0))break;
  return(m);} 
  int zxgbs(int a,int b,int y)
  {return(a*b/y;}
  main()
  {int i,j,k,l;
  scanf("%d,%d",&i,&j);
  k=zdgys(i,j);
  l=zxgbs(i,j,k);
  printf("%d和%d的最大公约数是:%d,最小公倍数是:%d",i,j,k,l) 
   程序二:
  #include<stdio.h>
  int zdgys(int a,int b)
   {
  int c,d;
  if(b>a)
  {c=a;a=b;b=c;}
  for(;;)} 
  d=a%b;
  if(d==0) break;
  a=b;
  b=d;} 
  return(b);} 
  int zxgbs(int a,int b,int y)
  {return(a*b/y;}
  main()
  {int i,j,k,l;
  scanf("%d,%d",&i,&j);
  k=zdgys(i,j);
  l=zxgbs(i,j,k);
  printf("%d和%d的最大公约数是:%d,最小公倍数是:%d",i,j,k,l);} 
  源程序可以在http://go8.163.com/~betterprogram/下载。