Я хочу использовать математическую формулу, перечисленную здесь:
https://en.wikipedia.org/wiki/Necklace_(combinatorics)#Number_of_bracelets
в файле node.js для вычисления общего количества уникальных последовательностей звонков, которые я могу сгенерировать, длиной n
, используя k
символов, с возможностью повторения и игнорируя зеркальные последовательности
Эта формула требует, чтобы предыдущая формула также была рассчитана, как указано здесь:
https://en.wikipedia.org/wiki/Necklace_(combinatorics)#Number_of_necklaces
Результаты этой формулы "Количество ожерелий" используются как Nk(n)
в формуле "Количество браслетов".
EDIT
вот окончательное решение:
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))