javascript - 确定一个数字是否由两个其他数字相乘之和组成的算法

标签 javascript algorithm math

假设给定 2k+2+3p=n 作为测试,如何找出测试对于数字是否正确当 k>=0 时对于数字有效, p>=0,n>=0:

example1 : n=24 should result true since k=5 & p=4 => 2(5)+2+3(4)=24

example2 : n=11 should result true since k=0 & p=3 => 2(0)+2+3(3)=11

example3 : n=15 should result true since k=5 & p=1 => 2(5)+2+3(1)=15

我想知道是否有数学解决方案。我像下面这样解决了它:

//let say 2k+2+3p=n
var accepted = false;
var betterNumber= n-2;
//assume p=0
var kReminder= (betterNumber)%2==0;
//assume k=0
var pReminder= (betterNumber)%3==0;

if (kReminder || pReminder){
    accepted=true;
}else{
    
    var biggerChunk= Math.Max(2,3); //max of 2k or 3p, here i try to find the bigger chunk of the 
    var smallerChunk= Math.Min(2,3);

    if ((betterNumber%bigger)%smallerChunk==0){
        accepted=true;
    }else
    {
        accepted=false;
    }    
}

仍然有一些我没有看到的边缘情况。所以我想知道是否有更好的解决方案。

更新

上面的测试只是一个例子。该解决方案对于大数字或任何数字组合(例如 1000000k+37383993+37326328393p=747437446239902

)应该足够有效

最佳答案

经检查,2是最小的有效偶数,5是最小的有效奇数:

2 is valid (k=0, p=0)
5 is valid (k=0, p=1)

All even numbers >= 2 and all odd numbers >= 5 are valid.
Even numbers: k=n/2-1, p=0
odd numbers: k=(n-3)/2-1, p=1

我们在这里所做的是递增 k,将 2 添加到最小的有效偶数和奇数,以获得所有更大的偶数和奇数。

除 3 之外,n >= 2 的所有值均有效。

关于javascript - 确定一个数字是否由两个其他数字相乘之和组成的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50335875/

相关文章:

类似facebook的 "time since"计算算法

algorithm - 用最少的颜色给图表着色

arrays - 混淆 "Find a pair with the given difference"中的时间复杂度

javascript - 将 "speed"添加到 "MoveTowards(start, target)"函数

c - 我真的不知道从哪里开始

algorithm - 如何将数字序列转换为单个数字?

javascript - 在 KnockoutJS 中获取提交处理程序的事件对象

javascript - 我无法在通过 $.ajax 添加的元素上使用日期选择器

javascript - 确保我的 .JS 文件每次都先于其他文件加载

javascript - 在 Android PhonGap 构建上强制景观