function [N1,masm,masdt]=getbestlength(N,mas_prost);
% функция определения лучшей длины и степеней при простых числах в
% иерархиях и массив приращений, по которому будет осуществляться
% прогнозирование.
%N=floor(N/4);
nmas_prost=length(mas_prost);
nprost_max=0;
for k=1:nmas_prost
    ll=log(N)/log(mas_prost(k));
    if (round(ll)<k)
        nprost_max=k;
        break;
    end
end
% i - nomer tekushego prostogo chisla, kotoroye uwelicivaem
%masdt - massiv prirasheniy
masm=[];
nkodmax=1;
for mk=1:nprost_max
    m=round(log(N)/(nprost_max*log(mas_prost(mk))));
    masm=[masm,m+1];
    nkodmax=nkodmax*(m+2);
end
ccurdt=getproduct(mas_prost,masm);
masdt=[];
bestkoldt=1;
% Оптимизацию проводим не по близкости к исходному н, а по кол-ву возможных
% порожденных иерархий.
bestmaxmasm=[];
for i=0:nkodmax-1
    cur_masm=[];
    kod=i;
    koldt=1;
    for k=1:nprost_max
        cur_masm=[cur_masm,mod(kod,masm(k)+1)];
        kod=floor(kod/(masm(k)+1));
        koldt=koldt*(cur_masm(k)+1);
    end
    curdt=[];
    curdt.dt=getproduct(mas_prost,cur_masm);
    curdt.kol=koldt;
    curdt.masm=cur_masm;
    if (curdt.dt<N)
        if (curdt.kol>bestkoldt)
            bestkoldt=koldt;
            bestmaxmasm=cur_masm;
            masdt=curdt;
            if (curdt.kol==bestkoldt)
                masdt=[masdt,curdt];
            end
        end
    end
end
bestdt=[];
bestdt.dt=1;
for cdt=masdt
    if (cdt.dt>bestdt.dt)
        bestdt=cdt;
    end
end
masm=bestdt.masm;
nkodmax=1;
for mk=1:nprost_max
    %m=round(log(N)/(nprost_max*log(mas_prost(mk))));
    %masm=[masm,m];
    nkodmax=nkodmax*(masm(mk)+1);
end

masdt=[];
bestmaxdt=N;
bestmaxmasm=[];
for i=0:nkodmax-1
    cur_masm=[];
    kod=i;
    for k=1:nprost_max
        cur_masm=[cur_masm,mod(kod,masm(k)+1)];
        kod=floor(kod/(masm(k)+1));
    end
    curdt=getproduct(mas_prost,cur_masm);
    %if (curdt<N)
        masdt=[masdt,curdt];
        if (N-curdt<bestmaxdt)
            bestmaxdt=N-curdt;
            bestmaxmasm=cur_masm;
        end
        %end
end


masdt=sort(masdt);
N1=getproduct(mas_prost,bestmaxmasm);
masm=bestmaxmasm;
%Есть сомнения по поводу работоспособности блока. Проверить на множестве
%примеров. ПРостестировать.


function prod=getproduct(mas_prost,masm);
% получаем произведение заданных степеней данного массива простых чисел.
prod=1;
for i=1:length(masm)
    prod=prod*(mas_prost(i)^masm(i));
end
