Javascript 将数学公式转换为node.js
我想使用下面列出的数学公式: 在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,
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创建一个临时数组。