// 封装一个函数玩玩
function inputTwoNum(){
var x=prompt("输入两个数字用/隔开"),
// var aa = new Array()
y = x.split("/")//将输入框中的两个数转换成数组
// aa[0] = y[0],
// aa[1] = y[1]
return y
}
function gys(a,b){
while(Math.abs(a-b)){
t = b
b = Math.abs(a-b)
a = t
}
return b
}
var x = inputTwoNum()
var a = Number(x[0]),
b = Number(x[1])
document.write(a+"跟"+b+"最大公约数是:"+gys(a,b))
第一种:for循环比较两个数因素相等的最大值
var x=prompt("输入两个数字用/隔开")
var y = x.split("/"),
a = y[0],
b = y[1]
if(a>b){//两个数的公约数不可能大于其中任何一个数,所以从较小的数字循环比较的,加快效率
t=a
a=b
b=t
}
for(i=ai>0i--){//因为是最大公约数,所以从大到小计算
if(a%i==0){//a的约数
if(b%i==0){//a的约数=b的约数
document.write(a+"跟"+b+"的最大公约数是:"+i)
break
}
}
}
第二种 while循环,取余结果为零时,被取余的那个数即为最大公约数(数学逻辑)
function gys(a,b){
var x=a%b
while(x){
a=bb=xx=a%b
}
return b
}
var x=prompt("输入两个数字用/隔开")
var y = x.split("/"),
a = y[0],
b = y[1]
document.write(a+"跟"+b+"的最大公约数是:"+gys(a,b))
第三种 while循环,更相减损法
function gys(a,b){
while(Math.abs(a-b)){
t = b
b = Math.abs(a-b)
a = t
}
return b
}
var x=prompt("输入两个数字用/隔开")
var y = x.split("/"),
a = y[0],
b = y[1]
document.write(a+"跟"+b+"最大公约数是:"+gys(a,b))
第四种:递归实现
function gys(a,b){
var x=a%b
if(x==0){
return b
}
a = b
b = x
x = a%b
return gys(a,b)
}
var x=prompt("输入两个数字用/隔开")
var y = x.split("/"),
a = y[0],
b = y[1]
document.write(a+"跟"+b+"的最大公约数是:"+gys(a,b))
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function getgongyueshu(a, b) {
if(b == 0 || a==0) {
return 0
}
return getgongyueshu(b, a % b)
}
var a = 8693724
var b = 92356
var gongyueshu = getgongyueshu(b, a)
console.log(a + "和" + b + "的" + "最大公约数是:" + gongyueshu)
var gongbeishu = a * b / gongyueshu
console.log(a + "和" + b + "的" + "最小公倍数是:" + gongbeishu)
</script>
</body>
</html>
<script language="javascript">function getSpecialNum(num1,num2,num3){var max=num1
var min=num1
var specilanum=new Object()
if(num1<1||num2<1||num3<1){
specilanum.GCM=-1
specilanum.LCM=-1
return specilanum
}
if(num2>num1)max=num2
if(max<num3)max=num3
if(num2<num1)min=num2
if(num3<min)min=num3
for(var i=mini>0i--){
if(num1%i==0&&num2%i==0&&num3%i==0){
specilanum.GCM=i
break
}
}
for(var i=maxi<=num1*num2*num3i++){
if(i%num1==0&&i%num2==0&&i%num3==0){
specilanum.LCM=i
break
}
}
return specilanum
}
</script>
调用该js函数,传递三个数字,会返回一个js对象,这个对象的属性LCM表示最小公倍数,GCM表示最大公约数。
如
var result=getSpecialNum(3,5,15)
alert(result.LCM)//弹出最小公倍数
alert(result.GCM)//弹出最大公约数