| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1698 人关注过本帖
标题:[求助]求助最小公倍数的实现原理
只看楼主 加入收藏
kezhongdeng
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-12-17
收藏
 问题点数:0 回复次数:2 
[求助]求助最小公倍数的实现原理
#include<iostream.h>
int fun(int nFirst,int nsecond);
void main()
{
int nFirst,nSecond;
cout<<"Please input the first one ";
cin>>nFirst;
cout<<"Please itput the second one ";
cin>>nSecond;
cout<<"最小公倍数: "<<fun(nFirst,nSecond)<<endl;
}
int fun(int nFirst,int nSecond)
{
int nMax,nMin;
if (nFirst>nSecond)
{
nMax = nFirst;
nMin = nSecond;
}
else
{
nMax = nSecond;
nMin = nFirst;
}
int nMod = nMax%nMin;
while (nMod)
{
nMax = nMin;
nMin = nMod;
nMod = nMax % nMin;
}
int nMultiple = nFirst * nSecond /nMin;
return nMultiple;
}
这是我做作业中遇到的一个题目,我想不通这到底是怎么回事,请各位指教!
搜索更多相关主题的帖子: 最小公倍数 原理 
2006-03-27 20:18
wanglff
Rank: 2
等 级:新手上路
威 望:5
帖 子:375
专家分:0
注 册:2005-12-21
收藏
得分:0 

while (nMod)
{
nMax = nMin;
nMin = nMod;
nMod = nMax % nMin;//求余当nmod为0的时候就退出程序

是在这里了
这个是数学知识了
最小公倍数
例如  8 和 4
通过比较得到
nmax=8
nmin=4
你看下int nMod = nMax%nMin;
用上面的数字代入


自强不息:)
2006-03-28 10:47
kezhongdeng
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-12-17
收藏
得分:0 

谢谢了哈,我后来总算弄明白了,我把它发上来,希望对和我一样的新手有帮助!

用辗转相除法求最大公约数和最小公倍数??我们在程序设计中,经常会遇到一些在一大堆数据中,求这些数据共有特性的情况。下面我们以两个例子向大家介绍这种算法。 ??一般地说,求最小公倍数用两个数的积除以最大公约数即可,而求最大公约数有两种算法: ??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 ??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 ??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);}??
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
例1、用辗转相除法求两个整数的最小公倍数。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void main(void)
{
int m,n,r,p;
clrscr();
while(1)
{
gotoxy(10,4);
printf("m,n=? ");
scanf("%d %d",&m,&n);
if (m && n) break;
gotoxy(10,6);
printf(The datas are invalid, press any key to input again.);
getch();
gotoxy(10,4);
printf(%30s,””);
gotoxy(10,6);
printf(%50s,””);
}
p=m*n;
r=m%n;
while(r)
{
m=n;
n=r;
r=m%n;
}
p/=n;
printf("LCM=%d",p);
getch();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
最小公倍数
黄惟明
  几个自然数的公倍数中,除0以外,最小的一个叫做这n个自然数的最小公倍数.a1a2,……,an的最小公倍数记作[ala2,……,an].例如, 4和 6的最小公倍数是 12,记作 [4,6]=12;3,6,9的最小公倍数是18,记作 [3,6,9]=18.
  最小公倍数有下列主要性质:①两个自然数的任意一个公倍数都是它们的最小公倍数的倍数.也就是说:如果[ab]=m,而nab的任意一个公倍数,那么mn.②两个自然数的最小公倍数与最大公约数的积等于这两个自然数的积.也就是说:〔ab〕·(ab)=ab
  如果两个自然数互质,那么它们的最小公倍数就是这两个数的积.
  求几个自然数的最小公倍数,一般有以下两种方法:
  ①分解质因数法:先把这几个数分别分解质因数,然后把各分解式中出现的所有不同质因数的最高次幂全部连乘起来,所得的积就是它们的最小公倍数.例如,求〔12,30,63〕.
  12、30和63这三个数的分解式中的所有不同的质因数是2、3、5、7,出现的2的最高次幂是22,3的最高次暴是32,5和7的最高次幂就是5和7,所以[12, 30, 63]=22×32×5×7=1260.
  在实际计算中,通常用短除法来计算,把几个数的一切公有的质因数和其中某几个数公有的质因数以及每个独有的质因数的积全部连乘起来,所得的积就是它们的最小公倍数.在上例中,可进行如下:
  其中3是三个数公有的质因数,2是两个数公有的质因数,每个数独有的质因数之积是2×5×21
  [12, 30, 63]=3×2×2×5×21=1260.
  ②利用最大公约数求最小公倍数:因为〔ab〕(ab)=ab,所以[ab]=ab÷(ab).也就是说,求两个数的最小公倍数,可以先求出它们的最大公约数,然后用这两个数的积除以它们的最大公约数,所得的商就是这两个数的最小公倍数.
  例如,求〔221,143〕.用辗转相除法,可求得(221,143)=13,所以〔221,143〕=221×143÷13=2431.
2006-03-30 17:19
快速回复:[求助]求助最小公倍数的实现原理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037484 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved