所以我正在寻找能够给出最接近n的数字的算法,该算法是m的因子。
如果我把这个问题写成愚蠢的话,我将提供一些例子:)
n = 10; m = 400;输出:10
n = 11; m = 400;输出:10
n = 16; m = 400;输出:16
n = 17; m = 400;输出16
n = 19; m = 400;输出20
我现在感到愚蠢。我可以用一些循环来强行推测这个但是我感觉不对。我现在正在python中做这个,但如果我知道这个公式,我想我使用的语言并不重要。编辑:所以我在javascript中使用while循环构建它并且它正在工作但我仍然想要一个更优雅的解决方案。
export const closestNumber = (n, m) => {
if (m % n !== 0) {
let p = 0;
while (true) {
p += 1;
if (m % (n + p) === 0) {
return Math.abs(n + p);
}
if (m % (n - p) === 0) {
return Math.abs(n - p);
}
}
}
return Math.abs(n);
};
先谢谢男女老少。我知道这里有很多聪明人。 :)
答案 0 :(得分:0)
最好的方法是找出数字的每个因素,并将数字与每个因素进行比较。
查找所有因素的较短方法是:
form = new FormData();
features = $.map($('[name^="feature"]'), function(item, index){if($(item).val()=='1'){return $(item).attr('name').replace(/[^0-9]/g, '');}});
form.append('features', features);
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
enctype: 'multipart/form-data',
cache: false,
processData: false,
contentType: false,
data: form,
complete: function(response)
{
//
}
});
您找到直到sqrt(number)的每个第一个素因数(因为在此之后它们不再存在) 然后将所有素数添加到因子列表中。
我们还可以在发现因素的同时进行比较。如果您愿意,我可以改善。
// find each factors
var i=2;
var diviseurs=[1];
for(var d=1;d<Math.sqrt(n)+1;d++)
for(var mult=d;mult<n;mult++)
if(d*mult == n){
if(d==mult){
diviseurs.push(d);
}else{
diviseurs.push(d);
diviseurs.push(mult);
}
}
diviseurs.push(n);