Вы знаете каким темпом растет число разбиений n?
Поэтому идея генерить все и фильтровать практического смысла не имеет.
Знаем... Ну, мало ли.
Вот вам oneliner для вашей задачи поиска количества разбиений из единиц и троек, на
pari/gpКод:
part13(n)=my (v=partitions(n,[1,3]),count=0);for(i=1,#v,if(Set(v[i])==[1,3],count++));count
Для
считает ответ (равный 33) за 0 миллисекунд.
Для
считает ответ (равный 333) за 1 секунду.
Для
не считает -- не хватает стека в 3 гигабайта.
Вот универсальный oneliner для подсчета любого набора
Код:
part_n_s(n,s)=my (v=partitions(n),count=0);for(i=1,#v,if(Set(v[i])==s,count++));count
его вызывать так
part_n_s(10,[1,3]), работает до
при стеке в 3 гигабайта.