如下代码可以实现:
<script>window.onload = function(){
var num = 36 //在这里修改那个数
var v = ""
for(var i = 1 i <= num i++) {
if(num % i == 0)
v += i + ","
}
if(v.length > 0)
v = v.substring(0, v.length - 1)
alert(num + "的所有约数为:" + v)
}
</script>
楼上的是一钟解决方案,本人的想法是:封装一个函数,功能是传入一个整数,返回这个数的约数组成的数组。那么求两个数的最大公约数就变成了求两个数组中相同元素的最大数。 最小公倍数就是先将两个数组合并,再去除合并的数组中相同的元素,得到的新数组的所有元素之积就是两个数的最小公倍数。求一个数所有约数的函数可以从1开始垒加到该数字,是其约数的就放入数组。<script>
// 封装一个函数玩玩
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>