javascript - 确定一个数字是否由两个其他数字相乘的和组成的算法
问题描述
假设它是2k+2+3p=n
作为测试给出的,如何找出测试对于一个数字是正确的,对于一个数字是有效的,当k>=0, p>=0, n>=0
:
示例 1:n=24 应为真,因为 k=5 & p=4 => 2(5)+2+3(4)=24
示例 2:n=11 应该结果为真,因为 k=0 & p=3 => 2(0)+2+3(3)=11
示例 3:n=15 应为真,因为 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 以将 2s 添加到最小的有效偶数和奇数,以获得所有更大的偶数和奇数。
n >= 2 的所有值都有效,但 3 除外。
推荐阅读
- python - 如何更新熊猫数据框中的值
- javascript - Javascript:如何从 API 获取特定数据?
- c - 为什么你可以在 C 中以 $ 开头的变量名?
- javascript - 创建phantomjs实例时如何设置代理
- c# - 将控件添加到用户控件
- visual-studio-code - 为什么 vscode 打开 code.js 文件而不是当前文件夹?
- javascript - Javascript多字段验证
- mysql - Common Lisp:如何解决我在尝试通过 cl-dbi 连接到 mysql 时收到的错误?
- python - 如何格式化字符串文字十六进制操作码?
- r - dplyr 包 - 变异