Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数学公式转换为node.js_Javascript_Node.js_Math_Formula_Bioinformatics - Fatal编程技术网

Javascript 将数学公式转换为node.js

Javascript 将数学公式转换为node.js,javascript,node.js,math,formula,bioinformatics,Javascript,Node.js,Math,Formula,Bioinformatics,我想使用下面列出的数学公式: 在node.js中,为了计算唯一环序列的总数,我可以使用k字符生成n长度,允许重复,并忽略镜像序列 此公式还需要计算前面的公式,如下所示: 此“项链数量”公式的结果在“手镯数量”公式中用作Nk(n) 编辑 以下是最终解决方案: const phi = require('number-theory').eulerPhi const divisors = require('number-theory').divisors let n = 6, k = 5,

我想使用下面列出的数学公式:

在node.js中,为了计算唯一环序列的总数,我可以使用
k
字符生成
n
长度,允许重复,并忽略镜像序列

此公式还需要计算前面的公式,如下所示:

此“项链数量”公式的结果在“手镯数量”公式中用作
Nk(n)

编辑

以下是最终解决方案:

const phi = require('number-theory').eulerPhi
const divisors = require('number-theory').divisors

let n = 6,
  k = 5,
  sum = (arr, func) => arr.reduce( (acc, n) => acc + func(n), 0),
  divisorsArray = divisors(n),
  necklaces = (1/n) * sum(divisorsArray, (d) => phi(d) * k ** (n/d))

let bracelets = (n % 2) ?
  (necklaces/2) + 0.5 * (k ** ((n+1)/2)) :
  (necklaces/2) + 0.25 * (k+1) * (k ** (n/2))

这是最终的解决方案,对我来说是正确的

const phi = require('number-theory').eulerPhi
const divisors = require('number-theory').divisors

let n = 6,
    k = 5,
    sum = (arr, func) => arr.reduce( (acc, n) => acc + func(n), 0),
    divisorsArray = divisors(n),
    necklaces = (1/n) * sum(divisorsArray, (d) => phi(d) * k ** (n/d))

let bracelets = (n % 2) ?
    (necklaces/2) + 0.5 * (k ** ((n+1)/2)) :
    (necklaces/2) + 0.25 * (k+1) * (k ** (n/2))

你可以使用这样一个数学库:谢谢你的提示,但是我对数学公式还不够了解,甚至还没有开始了解如何将它转换成TheoremJS,或者任何类型的js?有什么建议吗?我也不明白这个公式。我可以演示如何在js中创建一个和(这将是一个好的开始):const sum=(nStart,nEnd,myFunction)=>{return Array.from(Array(nEnd-nStart))//创建一个x元素的空数组。reduce((acc,item,n)=>acc+myFunction(n))//检查reduce function}sum(0,100,n=>n+1)西格玛符号的解释最终准确地描述了让你困惑的用法。关于数学符号的问题可能会得到更好的答案。正如你在这里所做的那样,准确地说出你不理解的部分总是很有帮助的。正如你在对你的问题的评论中所指出的,如果你正确地计算了总和,你就不需要数学了:)这似乎不正确,如果我从总和中删除
arr[0]
,对于k:5,n:5,我得到64,但是如果我把
arr[0]
back我得到了377(正确答案)解决方案不是只删除
arr[0]
(这会给你一个不同的错误值)。你需要用0替换它。啊,对了,我的坏,谢谢你,更新了我的代码来反映这一点。或者,
necklaces=divisiorsarray.map(d=>phi(d)*k**(n/d)).reduce((a,n)=>a+n)/n
。(在这种情况下,最好在最后除法,因为计算是精确的,而
1/n
不是2的幂除外。)reduce/map习惯用法在map是生成器的语言(如Python)中效果更好;在JS中,map创建一个临时数组。