假设给定 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/