Javascript 我如何创建一个for循环,该循环递增一个数字,直到找到一个';s的余数是0?
我有一个函数,它应该找到所提供的参数的最小公倍数,可以被这两个参数加上它们之间的参数平分 数组总是由两个数字组成,不能按数字顺序排列 比如说。Javascript 我如何创建一个for循环,该循环递增一个数字,直到找到一个';s的余数是0?,javascript,algorithm,for-loop,Javascript,Algorithm,For Loop,我有一个函数,它应该找到所提供的参数的最小公倍数,可以被这两个参数加上它们之间的参数平分 数组总是由两个数字组成,不能按数字顺序排列 比如说。[1,3]的值将返回6,或者[1,5]的值将是60 我知道首先我需要找到数组中的最小数和最大数 然后我必须把最小值和最大值范围内的所有数字,包括它们都放入一个数组中 然后我需要以某种方式创建一个for循环,它递增一个数字,直到它找到一个余数为0的循环,当它除以数组中的每个数字时 第三部分我理解,但不知道如何实施。任何帮助和提示都将不胜感激 这是我目前的代码
[1,3]
的值将返回6,或者[1,5]
的值将是60
function smallestCommons(arr) {
let minNum = Math.min(...arr);
let maxNum = Math.max(...arr);
let mySeq = [];
for(let i = minNum; i <= maxNum; i++){
mySeq.push(i);
}
// stuck here
}
function smallestCommons(arr){
设minNum=Math.min(…arr);
设maxNum=Math.max(…arr);
让mySeq=[];
基于你的想法,我可以创建这样一个函数
function smallestCommons(arr) {
let minNum = Math.min(...arr);
let maxNum = Math.max(...arr);
let mySeq = [];
for(let i = minNum; i <= maxNum; i++){
mySeq.push(i);
}
// stuck here
let smallestCommon = maxNum;
let found = false;
while(!found){
var j;
for(j = 0; j< mySeq.length; j++){
if(smallestCommon % mySeq[j] != 0) break;
}
if(j == mySeq.length){
found = true;
}else{
smallestCommon ++;
}
}
return smallestCommon;
}
smallestCommons([1, 3]) //return 6
smallestCommons([1, 5]) //return 60
function smallestCommons(arr){
设minNum=Math.min(…arr);
设maxNum=Math.max(…arr);
让mySeq=[];
对于(让i=minNum;i因为我不是JS人,所以我可以给你伪代码
lcm = 1
list =[1,2,3]
for i in len(list)-1:
lcm = lcm*list[i+1]/gcd(lcm,list[i+1])
print(lcm)
如果我们需要找到从1到n的数字的lcm
否则,我们需要使用列表的前两个数字初始化lcm。一种功能方法
常数范围=([min,max])=>{
设arr=[];
对于(VarI=min;i!b?a:gcd(b,a%b);
常数lcm=(a,b)=>(a*b)/gcd(a,b);
const smallestCommons=(arr)=>范围(arr).reduce((acc,cur)=>acc=lcm(acc,cur),arr[0]);
log(smallestCommons([1,3]);//6
log(smallestCommons([1,6]);/60
嘿,这是适用于您的场景的代码
let array = [1,5];
let returnValFunction = (arr) => {
try {
let minNum = Math.min(...arr);
let maxNum = Math.max(...arr);
let returnVal = false;
let i = 1;
while (!returnVal) {
let divingNum = maxNum * i;
let checkVal = true;
for (let a = maxNum; a >= minNum; a--) {
console.log('a', a);
console.log(Number.isInteger(divingNum / a));
!Number.isInteger(divingNum / a) ? checkVal = false : '';
}
if (checkVal) returnVal = divingNum;
i++;
};
return returnVal;
} catch(err) {
console.log(err);
}
}
let consoleValue = returnValFunction(array);
console.log('consoleValue', consoleValue);
这是一个需要解决的相互矛盾的问题。我这样解决了它,但我相信还有更好的办法
我首先计算了两个最大数字之间的lmc
然后,我比较这个数乘以1,然后乘以2,然后乘以3,依此类推,对下一个最低的数(最大数-2)进行模运算,直到结果为0。我继续计算模运算(最大数-3),直到(最大数-n)=arr[0]
功能lcm(nb1、nb2)
{
设i=1;
设j=1;
while(true)
{
对于(j=1;j 2)
{
设biggestCommon=lcm(arr[1]-1,arr[1]);
设mul=1;
for(让num=biggestNumber-2;num>arr[0];--num)
而(((最大公共*mul)%num)!=0)
++mul;
返回(最大公共*mul);
}
其他的
返回(最大编号);
}
}
log(smallestCommons([1,5]);
log(smallestCommons([1,3]);
log(smallestCommons([1,42]);
log(smallestCommons([7,10]);
console.log(smallestCommons([4,5]);
如何才能[1,3]
返回6?最小的公倍数是1。[1,5]
和60@Cid因为[1,3]表示1、2和3的lcm。类似地,[1,5]是1、2、3、4和5。实际上,您需要找到lcm,这将很难做到。为什么您不能找到gcd并使用属性lcm*hcf=num1*num2,这样您就可以找到[1,n]表示的范围内数字的lcm你创建了一个介于最小值和最大值之间的数字数组…在我看来,这没有用。创建一个循环,在其中收集所有倍数,最大值为minum*max(保证较低或此数字)。然后检查这两个数组的相同数据,得到最小的数字。谢谢@MadaraUchiha看起来我的数学真的很烂,我不知道两个数字的lcm