求两个数之间的最大公因数
Find highest common factor between two numbers
我正在尝试确定两个数字之间的最大公因数。这是我的代码
function Division(num1,num2) {
var sum = 1
//contain all divisor which can divide num without remainder
var num1_divisor = []
var num2_divisor = []
//if num1%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num1 % i == 0 )
{
num1_divisor.push(i)
}
}
console.log(num1_divisor)
//if num2%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num2 % i == 0 )
{
num2_divisor.push(i)
}
}
console.log(num2_divisor)
//if num1_divisor is contained in num2 divisor
//mulitply them by sum
for ( var i = 0 ; i < num1.length ; i++)
{
var num1_value = num1_divisor[i]
for ( var j = 0 ; j < num2.length ; j++)
{
var num2_value = num2_divisor[j]
if (num1_value == num2_value )
{
sum = sum * num2_value
}
}
}
return sum
}
程序的逻辑如下:对于num1和num2,它将把所有可除的值分别存储在num1_divisor和num2_divisor中。然后,我将把num1_divisor和num2_divisor之间的所有公约数相乘,以找到这两个数字之间的最大公约数。
我检查了程序,比较部分似乎有错误
if (num1_value == num2_value )
{
sum = sum * num2_value
}
由于我不知道的原因,num1_value不等于num2_value,尽管这两个数字是相同的。
一个例子是Division(10,12),它返回1,虽然它应该返回2
我很感激你的帮助
谢谢
一个数字没有length
,您可能想要检查num1_divisor.length
而不是num1.length
和num2_divisor.length
而不是num2.length
同时,您需要确保用于查找除数的循环包含数字本身,因为数字是其自身的除数。
for (var i = 1 ; i <= num1 ; i++)
和
for (var i = 1 ; i <= num2 ; i++)
经过这些修改,结果似乎是正确的
下面是查找最大公因数的更简单版本,它应该
// Generate an array from 0 to limit
function range(limit){
return Array.apply(null, Array(limit)).map(function (_, i) {return i;});
}
function greatestCommonFactor(number1, number2){
// Figure out who's larger and smaller
var largerNumber = Math.max(number1, number2);
var smallerNumber = Math.min(number1, number2);
// Use a range to avoid using counters and increments
var numbersUpToLargest = range(largerNumber + 1).slice(1);
// Find the numbers that divide the larger number perfectly
var largeNumberFactors = numbersUpToLargest.filter(function(number){
return !(largerNumber % number);
});
// With the larger number's factors, find the ones that divide the smaller number perfectly
var commonFactors = largeNumberFactors.filter(function(factor){
return !(smallerNumber % factor);
});
// Since we ordered from lowest to highest, reverse the array and get the first.
return commonFactors.reverse()[0];
}
alert(greatestCommonFactor(10, 12));
我在你的代码中发现了这个问题,问题不是你怀疑的地方,而是在两个for循环中,你在哪里找到除数数组的长度。而不是使用"num1"。长度",你需要使用"num1_divisor.length"。类似地,代替"num2"。长度",你需要输入"num2_divisor.length"
更正版本如下:
function Division(num1,num2) {
var sum = 1
//contain all divisor which can divide num without remainder
var num1_divisor = []
var num2_divisor = []
//if num1%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num1 % i == 0 )
{
num1_divisor.push(i)
}
}
//alert(num1_divisor)
//if num2%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num2 % i == 0 )
{
num2_divisor.push(i)
}
}
//alert(num2_divisor)
//if num1_divisor is contained in num2 divisor
//mulitply them by sum
//alert(num2_divisor.length);
for ( var i = 0 ; i < num1_divisor.length ; i++)
{
// alert(i);
var num1_value = num1_divisor[i]
for ( var j = 0 ; j < num2_divisor.length ; j++)
{
var num2_value = num2_divisor[j]
//alert( num1_value);
//alert( num2_value);
if (num1_value == num2_value )
{
//alert(sum);
sum = sum * num2_value
}
}
}
return sum
}
你可以在这里运行你的代码
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- 如何在aspx页面之间传递参数
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么是&&在没有if的行中的变量之间
- 求两个数之间的最大公因数
- 求两个值的公因数