информатика

Нужно написать программу на pascal abc

Оставить ответ
1

Ответ №1

//Данный алгоритм использует большое количество системных ресурсов. Например, для 10000 результат вычислялся 2 минуты, ну Вы поняли. Приношу свои извинения.
//PascalABC.NET 3.2 сборка 1318

Var
  ma:array of string;
  arr:array of integer;
  n,GroupCount,i,j,CountOfFails,k,mass:integer; 
 b:boolean;
  s:string;
begin
GroupCount:=1;
CountOfFails:=0;
b:=true;
read(n);
setlength(ma,GroupCount);
ma[0]:='1,';
for i:=2 to n do
begin
  for j:=0 to GroupCount-1 do
    begin
    s:=ma[j];
    mass:=0;
    while pos(',',s)<>0 do
      begin
        inc(mass);
        setlength(arr,mass);
        arr[mass-1]:=strtoint(copy(s,1,pos(',',s)-1));
        delete(s,1,pos(',',s));
       end;
      for k:=0 to mass-1 do
         if i mod arr[k]=0 then
          begin
            b:=false;
            inc(CountOfFails);
            break;
          end;
      if b=true then
        begin
          ma[j]+=inttostr(i)+',';
          break;
        end;
      if (b=false) and (CountOfFails=GroupCount) then
         begin
          inc(GroupCount);
          setlength(ma,GroupCount);
          ma[j+1]:=inttostr(i)+',';
         end;
      b:=true;
     end;
CountOfFails:=0;
b:=true;
end;
{writeln('End of main cycle reached');  //если хочется посмотреть разбивку
for j:=0 to GroupCount-1 do
writeln('Group #',j+1,':',ma[j]);
writeln('---------------------');}
writeln(GroupCount);
end.

Пример ввода:
10000
Пример вывода:
14

Знаете ответ?