Kth Arithmetic Derivative
by wio_dude
HTML
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&dummy=.js"></script>
<script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} }); </script>
$ n= $ <input type="text" id="n"/><br />
$ k= $ <input type="text" id="k"/><br />
<input type="button" id="calculate" value="Calculate"/>
<div id="output"></div>
<div id="work"></div>
JavaScript
var e = {
n: document.getElementById('n'),
k: document.getElementById('k'),
calculate: document.getElementById('calculate'),
output: document.getElementById('output'),
work: document.getElementById('work')
};
var primes = [2];
function lastPrime() {
return primes[primes.length-1];
}
function nextPrime() {
var i, j = lastPrime(), hasFactor;
while (true) {
j++;
hasFactor = false;
for (i = 0; i < primes.length; i++) {
if (j % primes[i] === 0) {
hasFactor = true;
break;
}
}
if (!hasFactor) {
break;
}
}
primes.push(j);
return j;
}
function nthPrime(n) {
while (primes.length <= n) {
nextPrime();
}
return primes[n];
}
function isPrime(n) {
var i = 0, p;
while (true) {
p = nthPrime(i);
if (n % p === 0) {
return (n == p);
}
i++;
}
}
function factor(n) {
var i = 0, p;
while (true) {
p = nthPrime(i);
if (n % p === 0) {
return [p, n/p];
}
i++;
}
}
function arithDeriv(n,k) {
if (k <= 0) {
return n;
}
if (n === 1) {
return 0;
}
var factors = factor(n);
var p = factors[0];
var m = factors[1];
if (m === 1) {
if (k === 1) {
return 1;
} else {
return 0;
}
}
return arithDeriv(m,k-1) + p * arithDeriv(m,k);
}
function arithDerivWork(n,k) {
if (k <= 0) {
return n;
}
if (n === 1) {
return 0;
}
var factors = factor(n);
var p = factors[0];
var m = factors[1];
if (m === 1) {
if (k === 1) {
e.work.innerHTML += "\\[" +
n + "^{[" + k + "]} = " + 1 + " \\]";
MathJax.Hub.Queue(["Typeset",MathJax.Hub,"work"]);
return 1;
} else {
return 0;
}
}
e.work.innerHTML...