Evo malo JS
Code:
function maxnzs (remain, index, product)
{
if (remain <= 1) return product;
var el = prim.get (index);
if (remain < el) return 1;
var newproduct = 1;
var elval = 1;
var newremain = remain;
var mymax = 1;
do
{
newproduct = maxnzs (newremain, index + 1, product * elval);
if (newproduct > mymax) mymax = newproduct;
elval *= el;
newremain = remain - elval;
} while (newremain >= 0);
return mymax;
}
prim je jedan pametni niz prostih brojeva.
prim.get (index) vraća prosti broj odgovarajućeg indexa: 0 => 2, 1 => 3, 2 => 5, ...
funkcija vraća mahimalni nzs svih kombinacija sabiraka prirodnog broja (po hipotezi da se rešenje sastoji samo od prostih brojeva i njihovih stepena).
poziv funkcije nije proizvoljan, već oblika maxnzs (broj, 0, 1) - za kršenje ovog pravila ne snosim posledice.
i konačno, tu je zakačena
kompletna aplikacija koja daje, recimo za pomenuti ulaz 10:
Citat:
number: 10
maxnzs: 30
elements: 2,3,5
one solution: (2,1,4,5,3,7,8,9,10,6)
stats: 28 calls of maxnzs ()
maxdepth: 4