我想使用此处列出的数学公式:
https://en.wikipedia.org/wiki/Necklace_(combinatorics)#Number_of_bracelets
在 node.js 中计算我可以使用 k
个字符生成 n
长度的唯一环序列的总数,允许重复,并忽略镜像序列
这个公式还需要计算前面的公式,如下所列:
https://en.wikipedia.org/wiki/Necklace_(combinatorics)#Number_of_necklaces
“项链数”公式的结果用作“手镯数”公式中的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))
关于javascript - 将数学公式转换为 node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52040161/