3个数最大公约数算法
请用高中必修3的语言来写,C++,JAVA等不适宜..........................我就是说只有INPUTPRINTIFWHILE那些来写...
请用高中必修3的语言来写,C++,JAVA等不适宜
..........................我就是说只有INPUT PRINT IF WHILE那些来写 展开
..........................我就是说只有INPUT PRINT IF WHILE那些来写 展开
展开全部
对于3个数A,B,C,最小公倍数=A*B*C/最小公约数的平方
对于对小公约数,可以采用两次辗转相除法
先求A,B的最小公约数D
再求出C与D的最小公约数E
那么E就是这三个数的最小公约数
A*B*C/E/E就是三个数的最小公倍数
举例如下
求1734,816和1343的最大公约数:
首先求1734,816的最大公约数:
gcd(1734,816)表示开始求1734,816的最大公约数。
gcd(1734,816)
=gcd(1734,816)1734=2*816+102
(102为1734除以816的余数,而2为商,以后的如此类推)
=gcd(816,102)816=8*102
(至此余数为0,则102为1734和816的最大公约数)
运用3个数的最大公约数的求解原理:
只需求的1343和102的最大公约数即为1734,816和1343的最大公约数。
gcd(1343,102)
=gcd(1343,102)1343=13*102+17
=gcd(102,17)102=6*17
(至此余数为0,则17为即为1734,816和1343的最大公约数)
则17为即为1734,816和1343的最大公约数
更相减损术求解(也是现学现卖的)
原理:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止,则这个等数就是所求的最大公约数。
其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。
首先看1734和816.
两个数都是偶数,为了简化计算,都除以2得到867和408.
下面是计算过程:
867-408=459
459-408=51
408-51=357
357-51=306
306-51=255
255-51=204
204-51=153
153-51=102
102-51=51
至此所得的减数和差相等,由于867和408是1734和816除以2得到的数字。故
1734和816的最大公约数还是102(51*2=102).
在用更相减损术求102和1343的的最大公约数即为1734,816和1343的最大公约数。
1343-102=1241(由于102*10=1020,1343-1020=323,323还是大于102的)
...
...
...
323-102=221
221-102=119
119-102=17
102-17=85
85-17=68
68-17=51
51-17=34
34-17=17
至此所得的减数和差相等.故17为1734,816和1343的最大公约数
对于对小公约数,可以采用两次辗转相除法
先求A,B的最小公约数D
再求出C与D的最小公约数E
那么E就是这三个数的最小公约数
A*B*C/E/E就是三个数的最小公倍数
举例如下
求1734,816和1343的最大公约数:
首先求1734,816的最大公约数:
gcd(1734,816)表示开始求1734,816的最大公约数。
gcd(1734,816)
=gcd(1734,816)1734=2*816+102
(102为1734除以816的余数,而2为商,以后的如此类推)
=gcd(816,102)816=8*102
(至此余数为0,则102为1734和816的最大公约数)
运用3个数的最大公约数的求解原理:
只需求的1343和102的最大公约数即为1734,816和1343的最大公约数。
gcd(1343,102)
=gcd(1343,102)1343=13*102+17
=gcd(102,17)102=6*17
(至此余数为0,则17为即为1734,816和1343的最大公约数)
则17为即为1734,816和1343的最大公约数
更相减损术求解(也是现学现卖的)
原理:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止,则这个等数就是所求的最大公约数。
其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。
首先看1734和816.
两个数都是偶数,为了简化计算,都除以2得到867和408.
下面是计算过程:
867-408=459
459-408=51
408-51=357
357-51=306
306-51=255
255-51=204
204-51=153
153-51=102
102-51=51
至此所得的减数和差相等,由于867和408是1734和816除以2得到的数字。故
1734和816的最大公约数还是102(51*2=102).
在用更相减损术求102和1343的的最大公约数即为1734,816和1343的最大公约数。
1343-102=1241(由于102*10=1020,1343-1020=323,323还是大于102的)
...
...
...
323-102=221
221-102=119
119-102=17
102-17=85
85-17=68
68-17=51
51-17=34
34-17=17
至此所得的减数和差相等.故17为1734,816和1343的最大公约数
2009-09-13
展开全部
高中必修3的语言?这个不太了解,
但是下面这个应该是最简单的方法了:
#include <stdio.h>
#include <conio.h>
int GetZDGY(int m,int n)//根据欧几里德辗转相除法计算两个数的最大公约数
{
if(m%n == 0)
return n;
return GetZDGY(n,m%n); //递归求最大公约数
}
int main()
{
int a,b,c;
int zdgy2,zdgy3;
printf("请输入3个数(输入方式: 数1,数2,数3)\n");
scanf("%d,%d,%d",&a,&b,&c);
zdgy2=GetZDGY(b,c); //先求其中两个数的最大公约数
zdgy3=GetZDGY(a,zdgy2);//再和第3个数求最大公约数
printf("最大公约数:%d",zdgy3);
getch();
return 0;
}
运行实例:
请输入3个数(输入方式: 数1,数2,数3)
216,81,273
最大公约数:3
但是下面这个应该是最简单的方法了:
#include <stdio.h>
#include <conio.h>
int GetZDGY(int m,int n)//根据欧几里德辗转相除法计算两个数的最大公约数
{
if(m%n == 0)
return n;
return GetZDGY(n,m%n); //递归求最大公约数
}
int main()
{
int a,b,c;
int zdgy2,zdgy3;
printf("请输入3个数(输入方式: 数1,数2,数3)\n");
scanf("%d,%d,%d",&a,&b,&c);
zdgy2=GetZDGY(b,c); //先求其中两个数的最大公约数
zdgy3=GetZDGY(a,zdgy2);//再和第3个数求最大公约数
printf("最大公约数:%d",zdgy3);
getch();
return 0;
}
运行实例:
请输入3个数(输入方式: 数1,数2,数3)
216,81,273
最大公约数:3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Public Function gys(m, n)
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
gys = m
End Function
Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
Dim t1 As Integer, t2 As Integer, t As Integer
x = Val(Text1.Text)
y = Val(Text2.Text)
z = Val(Text3.Text)
t1 = gys(x, z)
t2 = gys(x, y)
t = gys(t1, t2)
Print t;
End Sub
Do
r = m Mod n
m = n
n = r
Loop Until r = 0
gys = m
End Function
Private Sub Command1_Click()
Dim x As Integer, y As Integer, z As Integer
Dim t1 As Integer, t2 As Integer, t As Integer
x = Val(Text1.Text)
y = Val(Text2.Text)
z = Val(Text3.Text)
t1 = gys(x, z)
t2 = gys(x, y)
t = gys(t1, t2)
Print t;
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int max(int fir,int sec)
{
int t = 0;
int r = 0;
if(sec > fir)
{
t=fir;
fir=sec;
sec=t;
}
while((r=fir%sec)!=0)
{
fir=sec;
sec=r;
}
return(sec);
}
C语言编写的
{
int t = 0;
int r = 0;
if(sec > fir)
{
t=fir;
fir=sec;
sec=t;
}
while((r=fir%sec)!=0)
{
fir=sec;
sec=r;
}
return(sec);
}
C语言编写的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么是高中必修3的语言
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询