我有这个公式:
f(x)=(x^0+x^0+x^1+x^101+x^2+x^202)^n
这基本上是在面部显示值时滚动n个骰子的概率:
{0,0,1,101,2,202}
如何将其转换为JavaScript?
我知道我可以做递归函数来获得每个结果并将它们添加到结果数组中,但是超过9个骰子的任何东西都会变得很长。
编辑:请注意,x不是变量。这是一些花哨的数学符号,代表我忘记了概率。
答案 0 :(得分:1)
你问题中的 x 是一个形式变量,你要求一个程序来计算该变量中形式多项式的幂。这是一个快速实施。警告:我还没有执行它,无论如何它都缺乏润色。但我希望你明白这一点。
function polynomial_unit() {
return [1]; // Represents 1 = 1x^0
}
function polynomial_mult(x, y) {
var z = Array.apply(null, new Array((x.length + y.length - 1))).map(Number.prototype.valueOf,0);
for(var i = 0; i < x.length; i++) {
for(var j = 0; j < y.length; j++) {
z[i+j] += x[i]*y[j];
}
}
return z;
}
function generic_exp(base, exponent, mult, unit) {
var t = unit;
while (exponent > 1) {
if (exponent%2 == 1) t = mult(t, base);
base = mult(base, base);
exponent = Math.floor(exponent/2);
}
return mult(t, base);
}
function Wildhorn(n) {
var f = Array.apply(null, new Array(203)).map(Number.prototype.valueOf,0);
f[0] = 2; f[1] = 1; f[2] = 1; f[101] = 1; f[202] = 1;
return generic_exp(f, n, polynomial_mult, polynomial_unit());
}
答案 1 :(得分:0)
Javascript中有一个名为Math的全局对象,它具有数学函数。其中一个是用于表示:Math.pow。
你这样使用它:
Math.pow(base, exponent);
使用示例:
Math.pow(2, 4); // result == 16.
因此,您的功能可以编码为:
function WildhornDice (n) {
var x = someFancyMathematiqueSymbolThatRepresentIForgotWhat;
var result = Math.pow(x, 0) + // this should always be 1, right
Math.pow(x, 0) + // again, but only because I saw it in the question
Math.pow(x, 1) + // which equals x as far as I know
Math.pow(x, 101) +
Math.pow(x, 2) +
Math.pow(x, 202);
result = Math.pow(result, n);
return result;
}