Javascript 用表格法求最小公倍数
使用两个参数以及这些参数之间范围内的所有序列号都可以等分的参数,找到所提供参数的最小公倍数。只有两个参数。对于ex[1,3],找到1,2,3的lcm 注意-它可能会创建一个无限循环Javascript 用表格法求最小公倍数,javascript,algorithm,Javascript,Algorithm,使用两个参数以及这些参数之间范围内的所有序列号都可以等分的参数,找到所提供参数的最小公倍数。只有两个参数。对于ex[1,3],找到1,2,3的lcm 注意-它可能会创建一个无限循环 function smallestCommons(arr) { var nums = []; var multiples = []; if(arr[0]>arr[1]) { var bigger = arr[0]; } else { var bigger = arr[1];
function smallestCommons(arr) {
var nums = [];
var multiples = [];
if(arr[0]>arr[1]) {
var bigger = arr[0];
} else {
var bigger = arr[1];
}
for(var i=bigger;i>0;i--) {
nums.push(i);
console.log(i);
}console.log(nums + " nums");
var sums = 0;
while(sums != nums.length) {
for(var k=0;k<nums.length;k++) {
if(nums[k] % 2 === 0) {
nums[k] = nums[k]/2;
multiples.push(2);
} else if(nums[k] % 3 === 0) {
nums[k] = nums[k]/3;
multiples.push(3);
}else if(nums[k] % 5 === 0) {
nums[k] = nums[k]/5;
multiples.push(5);
}else if(nums[k] % 7 === 0) {
nums[k] = nums[k]/7;
multiples.push(7);
}else if(nums[k] === 1) {
break;
}else {
nums[k] = nums[k]/nums[k];
multiples.push(nums[k]);
}
}
for(var j = bigger; j>0;j--) {
sums = sums + nums[j];
}
}
var scm = [multiples].reduce(function(a,b){console.log(a*b)}); return scm
}
smallestCommons([1,5]);
function smallestCommons(arr){
var nums=[];
var倍数=[];
if(arr[0]>arr[1]){
var=arr[0];
}否则{
var=arr[1];
}
对于(var i=更大;i>0;i--){
推(一);
控制台日志(i);
}控制台日志(nums+“nums”);
var总和=0;
while(总和=nums.长度){
对于(var k=0;k0;j--){
总和=总和+nums[j];
}
}
var scm=[multiples].reduce(函数(a,b){console.log(a*b)});返回scm
}
小公域([1,5]);
您需要的是在范围(n,m)内找到LCM
看起来好多了。
您可以使用找到n的所有素因子!还有m,然后做一个简单的减法。我发现这是一个简单的解决方案,效果很好
- 循环所有可能的数字,从下限输入(var i)开始
- 对于每个数字,测试输入边界(var j)之间和包括输入边界(var j)的每个数字的可除性
- 如果我满足所有条件,则将其作为答案返回,否则将i增加1,然后重试
function smallestCommons(arr){
//设置上限和下限的变量
//以防它们不是按升序输入的
var big=arr[0] 对于(var j=small;j,您的实际要求是什么?我希望它首先将该数字除以最小的素数(2),如果是可等分的,则将其推到倍数,如果不是,则继续推到下一个素数,依此类推……最后将倍数与自身相乘,从而得到答案(lcm)nums[k]=nums[k]/nums[k];这一行给了你什么?把这个数除以素数直到7,如果它仍然不能被均匀整除,那么就把它设为1。我只是想先用这些小数字来做,但我无法让它工作。
function smallestCommons(arr) {
//set variables for upper and lower bounds
//incase they aren't entered in ascending order
var big = arr[0] < arr[1] ? arr[1]:arr[0],
small = arr[0] < arr[1] ? arr[0]:arr[1],
i = small;
//loop through all numbers, note the possibility of an infinite loop
while(true){
//test each number for divisibility by by both upper and lower
//bounds, as well as by all sequential numbers inbetween
for(var j = small; j <= big; j++){
if(i % j === 0){
if(j===big){
return i;
}
}else {
break;
}
}
i++;
}
}
smallestCommons([1,5]); //60